您的位置:首页 > 编程语言 > Java开发

leetcode137 Single Number II java

2017-03-07 16:29 459 查看

Description

Given an array of integers, every element appears three times except for one, which appears exactly once. Find that single one.

Note:

Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?

一个数组,除了一个出现一次的数,其余所有的数都出现了三次,找出那个只出现一次的数

要求时间复杂度O(n),空间复杂度O(1)

解法

先上代码:

public int singleNumber(int[] nums) {
int first=0, second=0;
for(int i=0; i<nums.length; i++) {
first = (nums[i] ^ first) & ~second;
second = (nums[i] ^ second) & ~first;
}
return first;
}


这道题可以这么理解:

每个数字出现三次即将其清零,最后剩下出现一次的就是结果。即00(0次)>10(1次)>01(2次)>00(3次)。

first表示:第一次出现该数的时候存入first。

second表示:这个数第二次出现,将first置零,second置1。

如果数第三次出现,它会尝试存入first,可是~second为0,所以存不上,此时first,second全部置空,这个数相当于没出现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode java