zoukankan      html  css  js  c++  java
  • 【算法】—— 相邻两数的最大差值

    题目:

    思路:

    如果数组长度为N,考虑使用N+1个桶,每个桶能放入数的范围固定,将数组中数据依次放入桶中,那么肯定有一个桶是空桶(因为数一共有N个,而桶有N+1个)。

    最大差值就出现在相邻两个不为空的桶之间,具体为当前铜的最小值减去前一个桶的最大值。

    需要注意的是:如何对于每个数,计算它应该放入的桶号。

     public static int bucket(long num, long len, long min, long max) {
            return (int) ((num - min) * len / (max - min));
        }

    代码:

    import java.util.*;
    
    public class Gap {
        public int maxGap(int[] nums, int n) {
            // write code here
            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;
            }
            //每个桶里是否有值
            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));
        }
    }
  • 相关阅读:
    【nginx】常见的陷阱和错误
    linux配置文件的一些调优
    关于防刷票的一些问题
    关于nginx的限速模块
    使用Javascript监控前端相关数据
    【mysql】关于Index Condition Pushdown特性
    【mysql】关于临时表
    堆和栈的区别(转过无数次的文章)
    深入PHP内核之in_array
    【mysql】索引的优化
  • 原文地址:https://www.cnblogs.com/bopo/p/9298092.html
Copyright © 2011-2022 走看看