zoukankan      html  css  js  c++  java
  • leetcode 164:Maximum Gap

    题意:

    给定非排序数组,找出其排序后相邻元素的最大差值。

    线性时间空间、元素数少于2时返回0、元素值非负且int范围内。

    思路:

    排序最快nlogn不符合要求;

    参考网上,学习了桶排序的方法;

    桶排序:按值分段处理;

    设定桶大小和桶个数;

    因为ans>=(MAX-MIN)/(len-1);

    桶大小:(MAX-MIN)/(len-1)向上取整,(注意为0时取1)

    桶个数:(MAX-MIN)/桶大小+1;

    ans取值只可能是桶A的最小值-桶B的最大值形式;不会在桶内取;(因为桶内最大差值小于桶大小)

     1 class Solution {
     2 public:
     3     int maximumGap(vector<int>& nums) {
     4         int len = nums.size();
     5         if(len<2)
     6             return 0;
     7         int minv = nums[0];
     8         int maxv = nums[0];
     9         for(int i=1;i<len;i++)
    10         {
    11             if(nums[i]<minv)
    12                 minv = nums[i];
    13             if(nums[i]>maxv)
    14                 maxv = nums[i];
    15         }
    16         if(maxv==minv)
    17             return 0;
    18         int x = (maxv-minv)/(len-1);
    19         if(x!=(maxv-minv)*1.0/(len-1)||x==0) //小数4.1
    20         {
    21             x++;
    22         }
    23         int n = (maxv-minv)/x+1;
    24         vector<int> bmin(n,INT_MAX);
    25         vector<int> bmax(n,INT_MIN);
    26 
    27 
    28         for(int i=0;i<len;i++)
    29         {
    30             int p = (nums[i]-minv)/x;
    31             bmin[p] = min(bmin[p],nums[i]);
    32             bmax[p] = max(bmax[p],nums[i]);
    33         }
    34         int ans = -1;
    35         int last = -1;
    36         for(int i=0;i<n;i++)
    37         {
    38             if(bmin[i]==INT_MAX)
    39                 continue;
    40             if(last == -1)
    41             {
    42                 last = bmax[i];
    43                 continue;
    44             }
    45             ans = max(ans, bmin[i]-last );
    46             last = bmax[i];
    47         }
    48         return ans;
    49     }
    50 };
    View Code
  • 相关阅读:
    jvm误区--动态对象年龄判定
    jmeter入门实例
    七牛云的文件上传和下载
    layer.prompt添加多个输入框
    zero copy图解
    java枚举的线程安全及序列化
    java单例模式
    ubuntu16.04 python3.5 opencv的安装与卸载(转载)
    独家git clone 加速方法
    apt get update无法正常使用解决方案(转载)
  • 原文地址:https://www.cnblogs.com/jsir2016bky/p/5982762.html
Copyright © 2011-2022 走看看