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;
    }
}
相关推荐
c++逐梦人7 小时前
DFS剪枝与优化
算法·深度优先·剪枝
量化炼金 (CodeAlchemy)7 小时前
【交易策略】基于随机森林的市场结构预测:机器学习在量化交易中的实战应用
算法·随机森林·机器学习
coder_Eight7 小时前
LRU 缓存实现详解:双向链表 + 哈希表
前端·算法
重生之我是Java开发战士7 小时前
【动态规划】路径问题:不同路径,珠宝的最高价值,下降路径最小和,最小路径和,地下城游戏
算法·游戏·动态规划
小辉同志7 小时前
739. 每日温度
c++·算法·leetcode
Via_Neo7 小时前
二进制枚举
数据结构·算法·leetcode
荣光属于凯撒7 小时前
P3040 [USACO12JAN] Bale Share S
算法·深度优先
kingcjh977 小时前
十、RL 算法性能调优指南
深度学习·算法
muls17 小时前
java面试宝典
java·linux·服务器·网络·算法·操作系统
BieberChen8 小时前
匈牙利匹配算法 (Hungarian Algorithm) 详解
算法