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

分析:因为要求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;
    }
};

  

相关文章:

  • 2022-12-23
  • 2021-06-17
  • 2021-07-02
  • 2021-11-17
  • 2021-11-03
  • 2022-12-23
猜你喜欢
  • 2022-03-01
  • 2021-04-04
  • 2021-09-28
  • 2022-01-29
  • 2022-12-23
  • 2021-04-13
  • 2021-09-05
相关资源
相似解决方案