题目:
Given an array of integers, every element appears three times except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
思路:
如果能定义三进制底下的某种位操作,也可以达到相同的效果,Single Number II中想要记录每个bit出现的次数,一个数搞不定就加两个数,用ones来记录只出现过一次的bits,用twos来记录只出现过两次的bits,ones&twos实际上就记录了出现过三次的bits,这时候我们来模拟进行出现3次就抵消为0的操作,抹去ones和twos中都为1的bits
代码:
public class Solution { public int singleNumber(int []nums) { int ones = 0; int twos = 0; int threes = 0; for(int num : nums) { twos = twos | (num&ones); ones = ones ^ num; threes = ones & twos; ones = ones & (~threes); twos = twos & (~threes); } int res = ones | twos; return res; } }