【LeetCode题解】Single Number II

Single Number II

 (Java代码)

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?

public class Solution {
    public int singleNumber(int[] A) {
		int once =0;
		int twice=0;
		for(int i=0;i<A.length;i++){
			twice |= once & A[i]; 
            once ^= A[i];//once记录了在A[i]之前出现的数位为1的情况。
            int not_three = ~(once & twice);
            once = not_three & once;
            twice = not_three & twice;
			
		}
		return once;    
    }
}
思路:这道题我想了很久,数位运算应该从整体考虑要,对于异或运算,要是总共有3个一样的数,进行3次,还是这个数本身,(我之前就是考虑太多每一步的结果)。

once里对3个一样的数进行异或(3次后还是它本身),twice里的数(当这个数第一次出现里面是0,第二次里面是这个数,第三次里面是这个数)。

当他俩一样的时候就把once和twice致零。

最后once里就是只出现一次的数。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值