其他分享
首页 > 其他分享> > LeetCode刷题笔记 MaxGap 最大间距

LeetCode刷题笔记 MaxGap 最大间距

作者:互联网

LeetCode刷题笔记

LeeCode题目:T164 MaxGap 最大间距

给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度O(N),且不能用非基于比较的排序

方法

借用桶排序思想可巧妙解决该问题。无需对数组排序即可找到最大差值。

  1. 全新的界面设计 ,将会带来全新的写作体验;
  2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
  3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
  4. 全新的 KaTeX数学公式 语法;
  5. 增加了支持甘特图的mermaid语法1 功能;
  6. 增加了 多屏幕编辑 Markdown文章功能;
  7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
  8. 增加了 检查列表 功能。

代码

public static int maxGap(int[] arr){
        if(arr == null || arr.length<2){
            return 0;
        }
        int len = arr.length;
        int min = Integer.MAX_VALUE;
        int max = Integer.MIN_VALUE;

        for (int i = 0; i < len; i++) {
            min = Math.min(min,arr[i]);
            max = Math.max(max,arr[i]);
        }
        if(min == max){//说明数组里的数都是同一个数
            return 0; }
        //桶里只记录 1、最小值 2、最大值 3、当前桶里是否有数
        boolean[] hasNum = new boolean[len+1];
        int[] mins = new int[len+1];
        int[] maxs = new int[len+1];
        int bid = 0;//桶的编号,从0开始

        //把数组的数依次放入对应的桶里
        for (int i = 0; i < len; i++) {
            bid = bucket(arr[i],len,min,max);
            //更新桶的最小值与最大值
            mins[bid] = hasNum[bid] ? Math.min(mins[bid],arr[i]) : arr[i];
            maxs[bid] = hasNum[bid] ? Math.max(maxs[bid],arr[i]) : arr[i];
            hasNum[bid] = true;//此时,桶内进数了 状态变为true
        }

        int res = 0; //记录最大差值
        int lastMax = maxs[0]; // 初始化前桶的最大值
        int i = 1;
        for ( ;  i<= len ; i++) { // 从i=1 开始的桶计算与前筒的差值
            if(hasNum[i]){//如果是空的直接跳过
                res = Math.max(res,mins[i] - lastMax);
                //后非空桶的最小值减去前非空桶最大值(数组相邻两数的差值),赋给res
                lastMax = maxs[i];//桶向后移动
            }
        }
        return res;
    }

    // 数num应该入几号桶
    public static int bucket(long num, long len ,long min, long max){
        // 防止(num-min)*len 溢出  转为long型
        return (int)((num-min)*len/(max-min));
    }

  1. mermaid语法说明 ↩︎

标签:arr,min,MaxGap,max,bid,len,int,LeetCode,刷题
来源: https://blog.csdn.net/weixin_44856492/article/details/115049651