- 164 最大间距
- 来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-gap - 给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。
如果数组元素个数小于 2,则返回 0。
示例 1:
输入: [3,6,9,1]
输出: 3
解释: 排序后的数组是 [1,3,6,9], 其中相邻元素 (3,6) 和 (6,9) 之间都存在最大差值 3。
解题思路:排序后找最大差值。其中基数排序,为什么需要逆序遍历???
TO DO:官方还有一种桶的解法,没看懂 = =
# python 3
class Solution:
def maximumGap(self, nums: List[int]) -> int:
if len(nums)<2: return 0
# 基数排序
exp = 1
buf = [0]*len(nums)
max_num = max(nums)
print(nums,max_num,len(nums))
while max_num>=exp:
count = [0]*10
for i in range(len(nums)):
count[nums[i]//exp %10] +=1
#print(count)
for i in range(1,10):
count[i] +=count[i-1]
#print(count)
for i in range(len(nums)-1,-1,-1): #为什么要逆序遍历
buf[count[nums[i]//exp %10] -1] = nums[i]
count[nums[i]//exp %10] -=1
nums = buf.copy()
exp *=10
print(nums)
# 快排
#nums.sort()
#print(nums)
max_gap, i = 0, 1
while i< len(nums):
max_gap = max(max_gap,abs(nums[i]-nums[i-1]))
i=i+1
return max_gap
// c++
class Solution {
public:
int maximumGap(vector<int>& nums) {
if (nums.size()<2) return 0;
sort(nums.begin(), nums.end());
int max_gap = 0;
for (int i=1; i<nums.size(); ++i){
max_gap = max(max_gap, nums[i]-nums[i-1]);
}
return max_gap;
}
};