-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMaximum_Gap.cpp
More file actions
32 lines (32 loc) · 1.01 KB
/
Copy pathMaximum_Gap.cpp
File metadata and controls
32 lines (32 loc) · 1.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class Solution {
public:
struct Bucket{
bool used = false;
int minval = INT_MAX;
int maxval = INT_MIN;
};
int maximumGap(vector<int>& nums) {
int n = nums.size();
if(n<2)
return 0;
int mn = *min_element(nums.begin(), nums.end());
int mx = *max_element(nums.begin(), nums.end());
int bucket_size = max(1, (mx-mn)/(n-1));
int bucket_num = (mx-mn)/bucket_size + 1;
vector<Bucket> buckets(bucket_num);
for(auto& num: nums){
int idx = (num-mn)/bucket_size;
buckets[idx].used = true;
buckets[idx].minval = min(num, buckets[idx].minval);
buckets[idx].maxval = max(num, buckets[idx].maxval);
}
int prevBucket = mn, max_gap = 0;
for(auto bucket: buckets){
if(!bucket.used)
continue;
max_gap = max(max_gap, bucket.minval - prevBucket);
prevBucket = bucket.maxval;
}
return max_gap;
}
};