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

相关推荐
小大宇20 分钟前
python flask框架 SSE流式返回、跨域、报错
开发语言·python·flask
青山木1 小时前
Hot 100 --- 岛屿数量
java·数据结构·算法·leetcode·深度优先·广度优先
柒星栈1 小时前
PHP 源码怎么加密防破解?三套方案实战指南
开发语言·php·android studio
勉灬之1 小时前
Next.js + Prisma 跨平台部署踩坑记
开发语言·javascript·ecmascript
程序员-珍1 小时前
报错下载android sdk失败
android·java
糖果店的幽灵1 小时前
langgraph分支之 - 动态分支(Dynamic Branch)
java·前端·javascript·人工智能·langgraph
吃饱了得干活1 小时前
亿级订单表分库分表设计,从0到1全流程
java·数据库·面试
这是个栗子1 小时前
前端开发中的常用工具函数(九)
开发语言·javascript·ecmascript·at
蓝创工坊Blue Foundry2 小时前
图片文字提取到 Excel:批量任务如何先定义要交付的字段
运维·服务器·开发语言·数据库·自动化·ocr·excel
会飞的小新2 小时前
C 标准库之 <fenv.h> 详解与深度解析
c语言·开发语言·microsoft