给定一个无序的数组,找出数组在排序后相邻的元素之间最大的差值。
尽量尝试在线性时间和空间复杂度情况下解决此问题。
若数组元素个数少于2,则返回0。
假定所有的元素都是非负整数且范围在32位有符号整数范围内。
详见:https://leetcode.com/problems/maximum-gap/description/
class Solution { public: int maximumGap(vector<int> &nums) { int n=nums.size(); if (n==0||nums.empty()) { return 0; } int mx = INT_MIN, mn = INT_MAX; for (int val : nums) { mx = max(mx, val); mn = min(mn, val); } 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 val : nums) { int idx = (val - mn) / size; bucket_min[idx] = min(bucket_min[idx], val); bucket_max[idx] = max(bucket_max[idx], val); 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; } };
参考:https://www.cnblogs.com/grandyang/p/4234970.html