164. 最大间距
解析:
排序后相邻数字最大间距 要 >= ceil((max - min) / (n - 1))
然后分桶,保持每个桶的max和min即可
class Solution { public: int maximumGap(vector<int>& nums) { if (nums.size() == 1) return 0; int min_v = nums[0], max_v = nums[0]; int n = nums.size(); int same_flag = true; for (int i = 1; i < n; i++) { min_v = min(nums[i], min_v); max_v = max(nums[i], max_v); if (nums[i] != nums[i - 1]) { same_flag = false; } } if (same_flag) return 0; int segment = ceil((max_v - min_v) / (double) (n - 1)); vector<vector<int>> terminal; terminal.reserve(n + 1); for (int i = 0; i <= n; i++) { vector<int> inner; terminal.push_back(inner); terminal[i].push_back(-1); terminal[i].push_back(0x7fffffff); } for (int i = 0; i < n; i++) { int d = (nums[i] - min_v) / segment; terminal[d][0] = max(terminal[d][0], nums[i]); terminal[d][1] = min(terminal[d][1], nums[i]); } int pre_max = -1; int ret = -1; for (int i = 0; i <= n; i++) { if (terminal[i][0] == -1) continue; cout << terminal[i][1] << " " << terminal[i][0] << endl; if (pre_max == -1) { pre_max = terminal[i][0]; } else { ret = max(ret, terminal[i][1] - pre_max); pre_max = terminal[i][0]; } } return ret; } };
自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。

浙公网安备 33010602011771号