美文网首页
相邻两数的最大差值

相邻两数的最大差值

作者: shoulda | 来源:发表于2018-07-16 09:03 被阅读0次

    题目:相邻两数的最大差值

    //主要功能函数
    public static int maxGap(int[] nums) {
            if (nums == null || nums.length < 2) {
                return 0;
            }
            int len = nums.length;
            int min = Integer.MAX_VALUE;
            int max = Integer.MIN_VALUE;
            //求出一组数中的最小值和最大值
            for (int i = 0; i < len; i++) {
                min = Math.min(min, nums[i]);
                max = Math.max(max, nums[i]);
            }
            if (min == max) {
                return 0;
            }
            //hashNum数组标记该号桶是否有值
            //求出该号桶的最大值,下标表示桶的位置
            //求出该号桶的最小值,下标表示桶的位置
            boolean[] hasNum = new boolean[len + 1];
            int[] maxs = new int[len + 1];
            int[] mins = new int[len + 1];
            int bid = 0;
            for (int i = 0; i < len; i++) {
                bid = bucket(nums[i], len, min, max);
                mins[bid] = hasNum[bid] ? Math.min(mins[bid], nums[i]) : nums[i];
                maxs[bid] = hasNum[bid] ? Math.max(maxs[bid], nums[i]) : nums[i];
                hasNum[bid] = true;
            }
            int res = 0;
            int lastMax = maxs[0];
            int i = 1;
            for (; i <= len; i++) {
                if (hasNum[i]) {
                    res = Math.max(res, mins[i] - lastMax);
                    lastMax = maxs[i];
                }
            }
            return res;
        }
    
    //求出在几号桶
    public static int bucket(long num, long len, long min, long max) {
            return (int) ((num - min) * len / (max - min));
        }
    
    

    相关文章

      网友评论

          本文标题:相邻两数的最大差值

          本文链接:https://www.haomeiwen.com/subject/rwjvpftx.html