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多平台发布

相关推荐
修己xj12 小时前
三月,我只想做好这四件事
程序员
不要秃头啊18 小时前
别再谈提效了:AI 时代的开发范式本质变了
前端·后端·程序员
jonjia18 小时前
引入新维度化解权衡难题
程序员
jonjia18 小时前
优秀的工程师如何打破规则
程序员
jonjia19 小时前
在大厂交付大型项目的策略
程序员
jonjia19 小时前
RFC 与设计文档
程序员
jonjia19 小时前
为什么你(或任何人)应该成为一名研发经理?
程序员
jonjia19 小时前
管理技术质量 (Manage Technical Quality)
程序员
jonjia19 小时前
大厂软件工程师职业发展路径
程序员
jonjia19 小时前
关于工程师与影响力
程序员