LintCode-最大间距
给定一个未经排序的数组,请找出其排序表中连续两个要素的最大间距。 如果数组中的要素少于 2 个,请返回 0.
注意事项
可以假定数组中的所有要素都是非负整数,且最大不超过 32 位整数。
样例
给定数组 [1, 9, 2, 5],其排序表为 [1, 2, 5, 9],其最大的间距是在 5 和 9 之间,= 4.
class Solution {
public:
/**
* @param nums: a vector of integers
* @return: the maximum difference
*/
int maximumGap(vector<int> nums) {
// write your code here
vector<vector<int>> bucket(nums.size()+1);
if(nums.size()<2)return 0;
int min=2147483647,max=0;
for(auto i:nums)
{
min=min>i?i:min;
max=max<i?i:max;
}
double size=((double)(max-min))/nums.size();
if(size==0) return size;
for(int i=0;i<nums.size();i++)
{
bucket[(int)((nums[i]-min)/size)].push_back(nums[i]);
}
int lastmax=-1,result=0;
for(int i=0;i<=nums.size();i++)
{
if(!bucket[i].empty())
{
min=bucket[i].front();
max=min;
for(auto j:bucket[i])
{
max=max<j?j:max;
min=min>j?j:min;
}
if(lastmax!=-1)
{
result=min-lastmax>result?min-lastmax:result;
}
lastmax=max;
}
}
return result;
}
};
错误点:
- bucket数量为nums.size()+1
- 桶容量为0时应直接返回0