137. 只出现一次的数字 II

题目

题解

方法一

  • 直接用哈希表出现 3 次则从哈希表移除,最后剩下的就是结果
java 复制代码
class Solution {
    public int singleNumber(int[] nums) {

        Map<Integer, Integer> map = new HashMap<>();
        for (int num : nums) {
            Integer integer = map.getOrDefault(num, 0);
            if (integer == 2) {
                map.remove(num);
            } else {
                map.put(num, integer + 1);
            }
        }
        for (Integer i : map.keySet()) {
            return i;
        }
        return 0;
    }
}

方法二

  • 其余元素都出现三次,其中某个元素只出现一次,将每个元素都转化为二进制,则可能的结果为 4 个数都相同或者 3 个数都相同
  • 同一位结果可能为 0000111100011110
  • 通过位运算得出所有该位的和,对 3 进行取模则得出结果数字该位的值
java 复制代码
class Solution {
    public int singleNumber(int[] nums) {
        int res = 0;
        for (int i = 0; i < 32; i++) {
            int sum = 0;
            for (int num : nums) {
                // 最后一位的值
                sum += num >> i & 1;
            }
            // 将不同的数补到 res 后面
            res |= sum % 3 << i;
        }
        return res;
    }
}

本文由mdnice多平台发布

相关推荐
程序员鱼皮35 分钟前
又一个新项目开源,让 AI 帮你盯全网热点!
javascript·ai·程序员·编程·ai编程
loonggg5 小时前
一个被99%程序员忽略的效率杀手:你每天盯着看的那块屏幕
程序员
程序员cxuan10 小时前
为什么 Claude 要求实名认证?
人工智能·后端·程序员
得物技术10 小时前
生成式召回在得物的落地技术分享与思考
算法·性能优化·程序员
JarvanMo11 小时前
别拦我!我要在手机上继续写代码
程序员
SimonKing11 小时前
AI大模型中转平台,无需科学上网就可以使用国外模型
java·后端·程序员
程序员cxuan13 小时前
10 个贼爽的 workflow 工作流
后端·程序员·代码规范
舒一笑1 天前
一文讲透 Temporal:为什么大厂都在用它做 AI 与分布式系统的“流程大脑”?
后端·程序员·llm
程序员鱼皮1 天前
别再说 AI 编程就是 Vibe Coding 了!6 种主流模式一次讲清
ai·程序员·编程·ai编程·vibe coding
SimonKing1 天前
OpenCode 20 个斜杠命令,90% 的人只用过 3 个
java·后端·程序员