力扣刷题3

一、前言

sheepice开启新的篇章了,虽然现在比较忙,但是如果有空,且写到一些比较有启发的力扣题的时候希望能够发一点点题解,毕竟三叶姐坚持了那么久,也给我有了很好的榜样作用!

sheepice的博客地址:大家感兴趣也可以去里面,说不定能学到一点东西哦!

二、leetcode每日一题

今天的每日一题难度不大,主要想记录一下关系哈希表的容器相关写法吧!


①思路:

采用哈希表记录下来所有出现过的数和对应的次数,然后利用绝对值大小进行排序(这个排序可以方便我们对表进行一次遍历,只需要看arr[i]对应的arr[i] * 2的次数是不是比前者大,即满足前者能够充分的匹配后者,然后一旦不满足就return false就好了的。


②解答:
class Solution {
public:
    bool canReorderDoubled(vector<int>& arr) {
         unordered_map<int, int> cnt;
        for (int x : arr) {
            ++cnt[x];
        }
        if (cnt[0] % 2) {
            return false;
        }

        vector<int> vals;
        vals.reserve(cnt.size());
        for (auto &[x, y] : cnt) {
            vals.push_back(x);
        }
        sort(vals.begin(), vals.end(), [](int a, int b) { return abs(a) < abs(b); });

        for (int x : vals) {
            if (cnt[2 * x] < cnt[x]) { // 无法找到足够的 2x 与 x 配对
                return false;
            }
            cnt[2 * x] -= cnt[x];
        }
        return true;
    }
};

③学到的东西
//应该都是容器的相关知识,但是我还没看到,就先记录一下
1.
    //将哈希表里面的第一个元素放到数组里面,
    for (auto &[x, y] : cnt) {
            vals.push_back(x);
        }
2.
    //直接在sort里面进行比较函数的书写
    sort(vals.begin(), vals.end(), [](int a, int b) { return abs(a) < abs(b); });

三、三叶姐的题解

因为自己还没有仔细学到拓扑排序还有优先队列,所以这个地方留着以后回来看:

三叶姐的题解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sheep.ice

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值