/*
* @lc app=leetcode id=164 lang=cpp
*
* [164] Maximum Gap
*/
class Solution {
public:
int maximumGap(vector<int>& nums) {
const int N = nums.size();
if (N == 0) return 0;
int mx = INT_MIN, mi = INT_MAX, res = 0;
for (const int num : nums) {
mx = max(mx, num);
mi = min(mi, num);
}
const int b_size = (mx - mi) / N + 1;
vector<int> mins(N, INT_MAX), maxs(N, INT_MIN);
for (const int num : nums) {
const int ind = (num - mi) / b_size;
mins[ind] = min(mins[ind], num);
maxs[ind] = max(maxs[ind], num);
}
for (int i = 1, pre = 0; i < N; ++i) {
if (mins[i] == INT_MAX) continue;
res = max(res, mins[i] - maxs[pre]);
pre = i;
}
return res;
}
};