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

相关推荐
二哈赛车手3 小时前
新人笔记---ApiFox的一些常见使用出错
java·笔记·spring
为何创造硅基生物3 小时前
C语言 结构体内存对齐规则(通俗易懂版)
c语言·开发语言
吃好睡好便好3 小时前
在Matlab中绘制横直方图
开发语言·学习·算法·matlab
栗子~~3 小时前
JAVA - 二层缓存设计(本地缓冲+redis缓冲+广播所有本地缓冲失效) demo
java·redis·缓存
星寂樱易李3 小时前
iperf3 + Python-- 网络带宽、网速、网络稳定性
开发语言·网络·python
YDS8293 小时前
DeepSeek RAG&MCP + Agent智能体项目 —— RAG知识库的搭建和接口实现
java·ai·springboot·agent·rag·deepseek
仰泳之鹅4 小时前
【C语言】自定义数据类型2——联合体与枚举
c语言·开发语言·算法
之歆4 小时前
DAY_12JavaScript DOM 完全指南(二):实战与性能篇
开发语言·前端·javascript·ecmascript
未若君雅裁5 小时前
MyBatis 一级缓存、二级缓存与清理机制
java·缓存·mybatis
cen__y5 小时前
Linux12(Git01)
linux·运维·服务器·c语言·开发语言·git