题目描述
思路
模拟
根据题意,先算出nums中元素的频率,然后按照元素频率和数值进行排序即可。
Python实现
class Solution:
def frequencySort(self, nums: List[int]) -> List[int]:
cnt = Counter(nums)
return sorted(nums, key=lambda x: (cnt[x], -x))
Java实现
class Solution {
public int[] frequencySort(int[] nums) {
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int num : nums) {
map.put(num, map.getOrDefault(num, 0)+1);
}
List<Integer> lst = new ArrayList<Integer>();
for (int num : nums) {
lst.add(num);
}
Collections.sort(lst, (a, b) -> {
int cnt1 = map.get(a), cnt2 = map.get(b);
return cnt1 != cnt2 ? cnt1 - cnt2 : b-a;
});
int length = nums.length;
for (int i = 0; i < length; i++) {
nums[i] = lst.get(i);
}
return nums;
}
}
C++实现
class Solution {
public:
vector<int> frequencySort(vector<int>& nums) {
unordered_map<int, int> cnt;
for (int num : nums) {
cnt[num]++;
}
sort(nums.begin(), nums.end(), [&](const int a, int b) {
if (cnt[a] != cnt[b]) {
return cnt[a] < cnt[b];
}
return a > b;
});
return nums;
}
};