LeetCode 164. Maximum Gap(求排序后相邻元素间的最大差值)

题意:求排序后相邻元素间的最大差值。

分析:因为要求T(n)=S(n)=O(n),所以基数排序。

class Solution {
public:
    int rank[10000010];
    int cnt[10];
    void RadixSort(vector<int>& nums, int base){
        memset(cnt, 0, sizeof cnt);
        memset(rank, 0, sizeof rank);
        int len = nums.size();
        for(int i = 0; i < len; ++i){
            ++cnt[(nums[i] / base) % 10];
        }
        for(int i = 1; i < 10; ++i){
            cnt[i] += cnt[i - 1];
        }
        for(int i = len - 1; i >= 0; --i){
            rank[--cnt[(nums[i] / base) % 10]] = nums[i];
        }
        for(int i = 0; i < len; ++i){
            nums[i] = rank[i];
        }
    }
    int maximumGap(vector<int>& nums) {
        int len = nums.size();
        if(len < 2) return 0;
        int ma = 0;
        for(int i = 0; i < len; ++i){
            ma = max(ma, nums[i]);
        }
        int base = 1;
        while(ma / base != 0){
            RadixSort(nums, base);
            base *= 10;
        }
        int ans = 0;
        for(int i = 1; i < len; ++i){
            ans = max(ans, nums[i] - nums[i - 1]);
        }
        return ans;
    }
};

  

原文地址:https://www.cnblogs.com/tyty-Somnuspoppy/p/12599892.html