給定一個無序的數(shù)組,找出數(shù)組在排序之后师骗,相鄰元素之間最大的差值历等。
如果數(shù)組元素個數(shù)小于 2,則返回 0辟癌。
示例 1:
輸入: [3,6,9,1]
輸出: 3
解釋: 排序后的數(shù)組是 [1,3,6,9], 其中相鄰元素 (3,6) 和 (6,9) 之間都存在最大差值 3寒屯。
示例 2:
輸入: [10]
輸出: 0
解釋: 數(shù)組元素個數(shù)小于 2,因此返回 0黍少。
說明:
- 你可以假設數(shù)組中所有元素都是非負整數(shù)寡夹,且數(shù)值在 32 位有符號整數(shù)范圍內。
- 請嘗試在線性時間復雜度和空間復雜度的條件下解決此問題厂置。
代碼
class Solution {
public:
int maximumGap(vector<int> &numss) {
if (numss.empty()) return 0;
int mx = INT_MIN, mn = INT_MAX, n = numss.size();
for (int d : numss) {
mx = max(mx, d);
mn = min(mn, d);
}
int size = (mx - mn) / n + 1;
int bucket_nums = (mx - mn) / size + 1;
vector<int> bucket_min(bucket_nums, INT_MAX);
vector<int> bucket_max(bucket_nums, INT_MIN);
set<int> s;
for (int d : numss) {
int idx = (d - mn) / size;
bucket_min[idx] = min(bucket_min[idx], d);
bucket_max[idx] = max(bucket_max[idx], d);
s.insert(idx);
}
int pre = 0, res = 0;
for (int i = 1; i < n; ++i) {
if (!s.count(i)) continue;
res = max(res, bucket_min[i] - bucket_max[pre]);
pre = i;
}
return res;
}
};