class Bucket {
public:
bool used = false;
int minval = numeric_limits<int>::max();
int maxval = numeric_limits<int>::min();
};
int (vector<int>& nums)
{
if (nums.empty() || nums.size() < 2)
return 0;
int mini = *min_element(nums.begin(), nums.end()),
maxi = *max_element(nums.begin(), nums.end());
int bucketSize = max(1, (maxi - mini) / ((int)nums.size() - 1));
int bucketNum = (maxi - mini) / bucketSize + 1;
vector<Bucket> buckets(bucketNum);
for (auto&& num : nums) {
int bucketIdx = (num - mini) / bucketSize;
buckets[bucketIdx].used = true;
buckets[bucketIdx].minval = min(num, buckets[bucketIdx].minval);
buckets[bucketIdx].maxval = max(num, buckets[bucketIdx].maxval);
}
int prevBucketMax = mini, maxGap = 0;
for (auto&& bucket : buckets) {
if (!bucket.used)
continue;
maxGap = max(maxGap, bucket.minval - prevBucketMax);
prevBucketMax = bucket.maxval;
}
return maxGap;
}
近期评论