LCR004-只出现一次的数字II

求解代码

java 复制代码
    public int singleNumber(int[] nums) {
        int ans = 0;
        // 遍历int的每一个二进制位,i表示当前处理第i位(0是最低位,31是最高位)
        for (int i = 0; i < 32; ++i) {
            int total = 0; // 统计当前第i位的总1数

            for (int num : nums) {
                // 提取num的第i位值(0或1)并累加
                // (num >> i):将num的第i位移到最低位
                // & 1:保留最低位,消去其他位,得到第i位的实际值(0/1)
                total += ((num >> i) & 1);
            }
            // 总1数%3≠0 → 唯一数的第i位是1
            if (total % 3 != 0) {
                // 将1写入ans的第i位:1<<i得到第i位为1、其余位为0的数,再和ans做或运算
                ans |= (1 << i);
            }
        }
        return ans;
    }

小贴士

对于二进制的每一位(0~31 位),数组中所有数的该位上的 1,只会来自两部分:

出现 3 次的数的该位 1 ➕ 出现 1 次的数的该位 1

由于 3 次的数的 1 相加后,总数一定是 3 的倍数,因此该位总 1%3 的结果,就是唯一数在该位的取值(01)。

相关推荐
一方热衷.2 小时前
YOLO26-Seg ONNXruntime C++/python推理
开发语言·c++·python
靓仔建4 小时前
Vue3导入组件出错does not provide an export named ‘user_setting‘ (at index.vue:180:10)
开发语言·前端·typescript
HalvmånEver4 小时前
7.高并发内存池大页内存申请释放以及使用定长内存池脱离new
java·spring boot·spring
凤山老林4 小时前
SpringBoot 使用 H2 文本数据库构建轻量级应用
java·数据库·spring boot·后端
赶路人儿5 小时前
UTC时间和时间戳介绍
java·开发语言
dreamread5 小时前
【SpringBoot整合系列】SpringBoot3.x整合Swagger
java·spring boot·后端
6+h5 小时前
【java】基本数据类型与包装类:拆箱装箱机制
java·开发语言·python
一直都在5725 小时前
Spring面经
java·后端·spring
xiaoye37085 小时前
如何在Spring中使用注解配置Bean的生命周期回调方法?
java·spring
闻哥5 小时前
深入Redis的RDB和AOF两种持久化方式以及AOF重写机制的分析
java·数据库·spring boot·redis·spring·缓存·面试