zoukankan      html  css  js  c++  java
  • [leedcode 164] Maximum Gap

    Given an unsorted array, find the maximum difference between the successive elements in its sorted form.

    Try to solve it in linear time/space.

    Return 0 if the array contains less than 2 elements.

    You may assume all elements in the array are non-negative integers and fit in the 32-bit signed integer range.

    public class Solution {
        public int maximumGap(int[] nums) {
           /* 桶排序
            假设有取值范围为A到B的N个元素,则他们的最大gap不会小于celling[(B - A) / (N - 1)]。
            让桶的长度len = celling[(B - A) / (N - 1)],则我们最多会有num = (B - A) / len + 1个桶(N)。
            对于数组中的任意元素K,我们可以通过计算toc = (K - A) / len轻松的找到它属于哪一个桶,然后我们维护每个桶中的最大值和最小值。
            由于同一个桶中元素的最大差值是len - 1,所有最后的答案不会是来自同一个桶中的两个元素。
            对于每一个非空的桶p,找到下一个非空的桶q,然后q.min - p.max就是该问题的潜在的最大值。返回这些值的最大值。*/
            if(nums==null||nums.length<=1) return 0;
            int min=nums[0];
            int max=nums[0];
            int len=nums.length;
            for(int i=1;i<len;i++){
                min=Math.min(min,nums[i]);
                max=Math.max(max,nums[i]);
            }
            int max_b[]=new int[len];
            int min_b[]=new int[len];
            for(int i=0;i<len;i++){
                int temp=nums[i];
                int k=(int)((len-1)*(1.0*(temp-min))/(max-min));
                if(min_b[k]==0||min_b[k]>temp) min_b[k]=temp;
                if(max_b[k]==0||max_b[k]<temp) max_b[k]=temp;
            }
            int res=0;
            int min1=max_b[0];
            for(int i=1;i<len;i++){
                if(max_b[i]==0) continue;
                res=Math.max(min_b[i]-min1,res);
                min1=max_b[i];
            }
            return res;
        }
    }
  • 相关阅读:
    css的三种特性
    css选择器
    margin:0 auto 与 text-align:center 的区别
    JS如何实现点击页面内任意的链接均加参数跳转
    css和js带参数(形如.css?v=与.js?v= 或 .css?version=与.js?version=)
    移动端页面前端设计随笔整理
    理解:Before和:After伪元素
    时下流行的css3页面纵向滑动效果
    webapp网页调试工具Chrome Devtools
    做手机web半年遇到的问题及解决方法
  • 原文地址:https://www.cnblogs.com/qiaomu/p/4695510.html
Copyright © 2011-2022 走看看