您的位置:首页 > 其它

[leetcode]Maximum Gap

2014-12-31 23:08 232 查看
用分桶的做法,思路参考自网友,很精妙。

class Solution {
public:
int maximumGap(vector<int> &num) {
int size = num.size();
if (size < 2) {
return 0;
}
int maxVal = *max_element(num.begin(), num.end());
int minVal = *min_element(num.begin(), num.end());
int gap = (maxVal - minVal - 1) / (size - 1) + 1; // ceiling function
int bucketSize = (maxVal - minVal) / gap;
vector<int> minBucket(bucketSize, INT_MAX);
vector<int> maxBucket(bucketSize, INT_MIN);
for (int i = 0; i < size; i++) {
if (num[i] == minVal || num[i] == maxVal) {
continue;
}
int idx = (num[i] - minVal) / gap;
minBucket[idx] = min(minBucket[idx], num[i]);
maxBucket[idx] = max(maxBucket[idx], num[i]);
}
int maxGap = INT_MIN;
int prev = minVal;
for (int i = 0; i < bucketSize; i++) {
if (minBucket[i] != INT_MAX) {
maxGap = max(maxGap, minBucket[i] - prev);
prev = maxBucket[i];
}
}
maxGap = max(maxGap, maxVal - prev);
return maxGap;
}
};


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: