TO DO【力扣】(困难)164. 最大间距 --- 基数排序

这篇博客探讨了LeetCode中164题的最大间距问题,通过基数排序解决无序数组排序后相邻元素的最大差值。当数组元素少于2时,返回0。文章指出官方还提供了一种桶排序的解法,但作者表示理解上存在困难。
摘要由CSDN通过智能技术生成
  • 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;
    }
};
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值