【无思路题目】1636. 按照频率将数组升序排序
- 2020 年 11 月 6 日
- 笔记
题目背景
我第一次尝试力扣双周赛,结果以这道题告败。第38场双周赛第一题,简单题,我却答不出。。。。
题目解法
【c++】我看了一下别人的方法,C++一般是先用cnt数组计算出频率,然用sort(nums.begin(),nums.end(),临时方法);
class Solution {
public:
vector<int> frequencySort(vector<int>& nums) {
unordered_map<int, int> cnt;
for (auto n : nums) {
cnt[n]++;
}
sort(nums.begin(), nums.end(), [&cnt](int a, int b) {
return (cnt[a] == cnt[b]) ? a > b : cnt[a] < cnt[b];
});
return nums;
}
};
【JAVA】然后发现了一个更好的方法,直接把-100 <= nums[i] <= 100用cnt数组提到了200,简直了,妙啊!
class Solution {
public int[] frequencySort(int[] nums) {
int[] cnts = new int[201];
for (int n : nums){
cnts[n + 100] ++;
}
for (int i = 0; i < nums.length; i ++){
nums[i] = 10000 * cnts[nums[i] + 100] - nums[i] + 100;
}
Arrays.sort(nums);
for (int i = 0; i < nums.length; i ++){
nums[i] = 100 - nums[i] % 10000 ;
}
return nums;
}
}