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

浙公网安备 33010602011771号