#1: sort
class Solution {
public:
int maximumGap(vector<int>& nums) {
int n = nums.size();
if (n < 2) return 0;
int res = 0;
sort(nums.begin(), nums.end());
for (int i = 1; i < n; i++) {
int d = nums[i] - nums[i-1];
res = res > d ? res : d;
}
return res;
}
};#2: bucket sort 答案解法
class Solution {
public:
int maximumGap(vector<int>& nums) {
int n = nums.size();
if (n < 2) return 0;
int min = nums[0], max = nums[0];
for (int i = 1; i < n; i++) {
min = nums[i] < min ? nums[i] : min;
max = nums[i] > max ? nums[i] : max;
}
int p = (max - min) / (n - 1) + 1; //平均差值
int b = (max - min) / p + 1; // 桶个数
vector<vector<int>> bucket(b, vector<int>());
vector<int> maxs(b, -1);
vector<int> mins(b, max);
for (int i = 0; i < n; i++) {
int j = (nums[i] - min)/p;
bucket[j].push_back(nums[i]);
maxs[j] = maxs[j] > nums[i] ? maxs[j] : nums[i];
mins[j] = mins[j] < nums[i] ? mins[j] : nums[i];
}
int res = p - 1;
for (int s = b - 1, i = b - 2; i >= 0; i--) {
if (bucket[i].empty()) continue;
int diff = mins[s] - maxs[i];
res = res > diff ? res : diff;
s = i;
}
return res;
}
};
147

被折叠的 条评论
为什么被折叠?



