Leetcode 只出现一次的数字 II


也就是说,ones 和 twos 是若干个 并行更新的,相当于两个单独的0-1数组,two[i] one[i] 组成当前位 i 的状态。由于只存在一个出现次数为 1 的数字,所以遍历完所有数字后,各二进制位的状态只可能处于 00 或 01 状态,不可能处于 10 状态,此时由于twos恒为0,所以我们可以用 ones 来返回最终的结果。

java 实现

java 复制代码
class Solution {
    public int singleNumber(int[] nums) {
        int ones = 0, twos = 0;
        for(int num:nums) {
            ones = (ones ^ num) & ~twos; //更新所有位状态的 one 
            twos = (twos ^ num) & ~ones; //更新所有位状态的 two 
        }
        return ones;
    }
}
相关推荐
tankeven29 分钟前
HJ94 记票统计
c++·算法
逆境不可逃33 分钟前
LeetCode 热题 100 之 76.最小覆盖子串
java·算法·leetcode·职场和发展·滑动窗口
I_LPL39 分钟前
day35 代码随想录算法训练营 动态规划专题3
java·算法·动态规划·hot100·求职面试
DeepModel42 分钟前
【回归算法】多项式回归详解
算法·回归
踩坑记录1 小时前
leetcode hot100 78. 子集 递归回溯 medium 位运算法
leetcode
Frostnova丶1 小时前
LeetCode 761. 特殊的二进制字符串
算法·leetcode
不吃橘子的橘猫1 小时前
《集成电路设计》复习资料3(电路模拟与SPICE)
学习·算法·集成电路·仿真·半导体
m0_531237171 小时前
C语言-函数递归
算法
mjhcsp1 小时前
C++Z 函数超详细解析
c++·算法·z 函数
再难也得平2 小时前
[LeetCode刷题]49.字母异位词分组(通俗易懂的java题解)
java·开发语言·leetcode