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));
        }
    }
  • 相关阅读:
    云服务器迁移的那些事之一
    《编译原理》(第二版)第一章的学习笔记(一)
    vs 实用扩展
    SQL多的是,你不知道的事
    Entity Framework 批量插入 提速
    oracle 回收已删除的表
    发现一个奇怪的问题!
    看到易办网的希望...
    asp.net不认为数据库字段的空值为null
    什么是伪url?
  • 原文地址:https://www.cnblogs.com/bopo/p/9298092.html
Copyright © 2011-2022 走看看