代码实现
class Solution {
public:
int offset = 100;
vector<int> frequencySort(vector<int>& nums) {
int hash[201] = {0};
for (auto i : nums) {
++hash[i + offset];
}
sort(nums.begin(), nums.end(), [&](int a, int b) {
return hash[a + offset] != hash[b + offset] ? hash[a + offset] < hash[b + offset] : a > b ;
});
return nums;
}
};
思路
排序规格如下:
- 数字出现频率高,越靠前
- 频率相等,数值小的靠前
解答
- 用hash表统计数字出现频率
- 需要注意负数需要映射到正数范围
- 用sort函数编写规则排序
- sort函数使用匿名函数&,表示引用外部变量(本题中引用hash)
- return a > b;意思是——排序规则是左边的数要大,右边的要小。hash[a + offset] < hash[b + offset] 表示左边数的频率小于右边数的频率