给定一个无序的数组,找出数组在排序后相邻的元素之间最大的差值。
尽量尝试在线性时间和空间复杂度情况下解决此问题。
若数组元素个数少于2,则返回0。
假定所有的元素都是非负整数且范围在32位有符号整数范围内。
详见:https://leetcode.com/problems/maximum-gap/description/
class Solution {
public:
int maximumGap(vector<int> &nums) {
int n=nums.size();
if (n==0||nums.empty())
{
return 0;
}
int mx = INT_MIN, mn = INT_MAX;
for (int val : nums)
{
mx = max(mx, val);
mn = min(mn, val);
}
int size = (mx - mn) / n + 1;
int bucket_nums = (mx - mn) / size + 1;
vector<int> bucket_min(bucket_nums, INT_MAX);
vector<int> bucket_max(bucket_nums, INT_MIN);
set<int> s;
for (int val : nums)
{
int idx = (val - mn) / size;
bucket_min[idx] = min(bucket_min[idx], val);
bucket_max[idx] = max(bucket_max[idx], val);
s.insert(idx);
}
int pre = 0, res = 0;
for (int i = 1; i < n; ++i)
{
if (!s.count(i))
{
continue;
}
res = max(res, bucket_min[i] - bucket_max[pre]);
pre = i;
}
return res;
}
};
参考:https://www.cnblogs.com/grandyang/p/4234970.html