JAVA Leetcode137.只出现一次的数字 II

题目

  1. 只出现一次的数字 II
    给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/single-number-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解

class Solution {
    public int singleNumber(int[] nums) {
        int a = 0;
        int b = 0;

        for(int i : nums){
            a = (a^i) & ~b;
            b = (b^i) & ~a;
        }
        
        return a;
    }
}

解题思路

推荐先把简单版看懂。 Leetcode136 只出现一次的数字

只出现一次的数字 中,只需要在两个状态之间进行转化,所以用一个变量就能储存。在本题中,则需要两个变量来存储这种转化的当前状态。

类似这样

- a b
0 x x
1 x^i x
2 x x^i
3 x x

x & ~x = 0
x & ~0 = x

- a b
0 0 0
1 (a^i) & ~b = 0^i & ~0 = i (b^i) & ~a = 0^i & ~i = 0
2 (a^i) & ~b = i^i & ~0 = 0 (b^i) & ~a = 0^i & ~0 = i
3 (a^i) & ~b = 0^i & ~i = 0 (b^i) & ~a = 0^i & ~0 = 0

你可能感兴趣的:(算法与数据结构,leetcode,算法,动态规划)