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; } };