20220212:力扣第277场周赛(下)

力扣第277场周赛(上)

题目

    1. 找出数组中的所有孤独数字在这里插入图片描述
    1. 基于陈述统计最多好人数
      在这里插入图片描述

思路与算法

    1. 找出数组中的所有孤独数字
      按照题意模拟即可,使用map来统计即可。
    1. 基于陈述统计最多好人数
      这个题目有点超纲了,看一眼题目看不太懂,看了 @灵茶山艾府 大佬的二进制位运算解法,自叹不如,极其精妙的解法,代码引用学习一下。这个goto的用法真是神乎其技了。

代码实现

    1. 找出数组中的所有孤独数字
class Solution {
public:
    vector<int> findLonely(vector<int>& nums) {
        vector<int> res;
        unordered_map<int,int> map;
        for (auto num:nums) {
            map[num]++;
        }
        for (auto num : nums) {
            if (map[num] == 1 && map[num - 1] == 0 && map[num + 1] == 0)
                res.push_back(num);
        }
        return res;
    }
};
    1. 基于陈述统计最多好人数
class Solution {
public:
    int maximumGood(vector<vector<int>> &statements) {
        int ans = 0, n = statements.size();
        for (int i = 1; i < 1 << n; ++i) {
            int cnt = 0; // i 中好人个数
            for (int j = 0; j < n; ++j) {
                if ((i >> j) & 1) { // 枚举 i 中的好人 j
                    for (int k = 0; k < n; ++k) { // 枚举 j 的所有陈述
                        if (statements[j][k] < 2 && statements[j][k] != ((i >> k) & 1)) { // 该陈述与实际情况矛盾
                            goto next;
                        }
                    }
                    ++cnt;
                }
            }
            ans = max(ans, cnt);
            next:;
        }
        return ans;
    }
};

写在最后

  1. 保持节奏,坚持不懈!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

IMMUNIZE

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

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

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

打赏作者

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

抵扣说明:

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

余额充值