1636. 按照频率将数组升序排序

代码实现

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] 表示左边数的频率小于右边数的频率
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值