2024每日刷题(157)
Leetcode—164. 最大间距
直接法实现代码
class Solution {
public:
int maximumGap(vector<int>& nums) {
int n = nums.size();
if(n == 1) {
return 0;
}
ranges::sort(nums);
int diff = -1;
int pre = nums[0];
for(int i = 1; i < n; i++) {
diff = max(diff, nums[i] - pre);
pre = nums[i];
}
return diff;
}
};
运行结果
桶排序算法思想
桶排序法实现代码
struct Bucket {
int mn;
int mx;
};
class Solution {
public:
int maximumGap(vector<int>& nums) {
int mn = ranges::min(nums);
int mx = ranges::max(nums);
int n = nums.size();
if(n < 2) {
return 0;
}
if(mn == mx) {
return 0;
}
int bucketVol = ceil((mx - mn) / (double)(n - 1));
int bucketSize = (mx - mn) / bucketVol + 1;
vector<Bucket> bt(bucketSize, {INT_MAX, INT_MIN});
for(int i = 0; i < n; i++) {
int cursor = (nums[i] - mn) / bucketVol;
bt[cursor].mn = min(bt[cursor].mn, nums[i]);
bt[cursor].mx = max(bt[cursor].mx, nums[i]);
}
int preMax = bt[0].mx;
int ans = 0;
for(int i = 1; i < bucketSize; i++) {
if(bt[i].mn == INT_MAX) {
continue;
}
ans = max(bt[i].mn - preMax, ans);
preMax = bt[i].mx;
}
return ans;
}
};
运行结果
之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!