题目链接:https://leetcode-cn.com/problems/maximum-gap/
要求:线性的时间和空间。
运用桶排序的方法:
步骤:
1 先找出数组中的最大值和最小值;
2 运用最大值和最小值,数组的大小计算桶中的区间大小,
3 依据区间大小计算需要桶的个数;
4 最大差值一定是后一桶的最小值减去前一个桶的最大值。
class Solution {
public:
int maximumGap(vector<int>& nums) {
if (nums.size() < 2) return 0;
if (nums.size() == 2) return abs(nums[1] - nums[0]);
int maxn = 0;//存放最大值
int minn = INT_MAX;//存放最小值
for (int i = 0; i < nums.size(); i++)
maxn = max(maxn, nums[i]);
for (int i = 0; i < nums.size(); i++)
minn = min(minn, nums[i]);
if(maxn==minn) return 0;//若相等的话说明数组中存在n个相同数字
int size = (maxn - minn) / nums.size();//区间大小
if(size<1) size=1;//若size小于1说明数组存在很多重复元素
int num = (maxn - minn) / size + 1;//桶的个数
vector