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)。

相关推荐
鲨鱼辣钊1 小时前
【FastAPI筑基-Day19】APScheduler定时任务全实战|自动执行、动态启停、后台常驻
java·spring·fastapi
不正经学生3 小时前
C语言预处理详解:编译器真正动手之前的那些事
c语言·开发语言·算法·面试·bug
门思科技3 小时前
LoRaWAN 设备类别:Class A、B、C 对比与选型指南
c语言·开发语言·php
恋恋西风6 小时前
C++ 理解 std::thread 在单核和多核上的行为差异
开发语言·c++
学长毕业设计6 小时前
基于SpringBoot的公益基金管理系统(源码+文档+讲解视频)
java·spring boot·后端
Brilliantwxx6 小时前
【Linux】 进程(9)程序与进程地址空间(基础+进阶+面试题)
linux·运维·服务器·开发语言·c++
东小西6 小时前
【SAA实战】第 3 篇 · 工具调用全攻略:把业务能力交给 Agent 自己调度
java·后端·spring
东小西6 小时前
【SAA实战】第 4 篇 · Agent 短期记忆:saver 让 Agent 跨轮记得住(threadId 隔离)
java·后端·spring
许彰午6 小时前
22-DataCenter报文序列化
java·低代码·架构·状态模式
2601_962065256 小时前
[MySQL] SQL优化之性能分析
java·sql·mysql