前言
今天刷leetcode的第164题直接就蒙了,后来看了题解才发现是桶排序的东西,咱们这回把这俩排序算法一起搞定,顺便把leetcode上的相关题目ac掉。
桶排序
其实桶排序非常好理解,就是将长的序列先分成等间距的很多个桶,然后将序列元素放进各自对应的桶里,最后桶内排序,就完了。这个过程实在是太过于简单,咱们就直接上代码。
leetcode164
题目描述
给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。
如果数组元素个数小于 2,则返回 0。
示例 1:
输入: [3,6,9,1]
输出: 3
解释: 排序后的数组是 [1,3,6,9], 其中相邻元素 (3,6) 和 (6,9) 之间都存在最大差值 3。
示例 2:
输入: [10]
输出: 0
解释: 数组元素个数小于 2,因此返回 0。
说明:
你可以假设数组中所有元素都是非负整数,且数值在 32 位有符号整数范围内。
请尝试在线性时间复杂度和空间复杂度的条件下解决此问题。
解题思路
其实桶排序就是决定一个桶的个数即可。我看网上的做法一般都是在数据量不大的情况下平均一个桶里存放一个数据,确实有点奢侈哈,当然你也可以自己看着来,要是数据量很大了,那就别吝啬桶的个数了。
代码
class Solution {
public:
int maximumGap(vector<int>& nums) {
if(nums.size() < 2)
return 0;
if(nums.size() < 500)
{
sort(nums.begin(), nums.end());
int res = nums[1] - nums[0];
for(int i = 0; i < nums.size()-1; ++ i)
res = (res > nums[i+1] - nums[i]) ? res :