• [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;
        }
    }
  • 相关阅读:
    页面布局的一些心得
    EverNote自定义模板
    运行时创建类的小问题
    测试窗体只能用于来自本地计算机的请求
    VS2010技巧:如何在js文件中使用jQuery智能感知
    让SQL Server Compact支持 Membership, Role and Profile provider
    MVC3返回一个或者多个数据集的方法
    NuGet使用方法
    mvc@helper 的用法和作用
    LINQ to Entities 不识别方法"System.String ToString()"
  • 原文地址:https://www.cnblogs.com/qiaomu/p/4695510.html
Copyright © 2020-2023  润新知