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?
序列号 | 符号 | 名称 | 结合性(与操作数) | 目数 | 说明 |
1 | . | 点 | 从左到右 | 双目 |
|
( ) | 圆括号 | 从左到右 |
|
| |
[ ] | 方括号 | 从左到右 |
|
| |
2 | + | 正号 | 从右到左 | 单目 |
|
- | 负号 | 从右到左 | 单目 |
| |
++ | 自增 | 从右到左 | 单目 | 前缀增,后缀增 | |
- - | 自减 | 从右到左 | 前缀减,后缀减 | ||
~ | 按位非/取补运算 | 从右到左 | 单目 |
| |
! | 逻辑非 | 从右到左 | 单目 | ||
3 | * | 乘 | 从左到右 | 双目 |
|
/ | 除 | 从左到右 | 双目 | 整数除法:取商的整数部分,小数部分去掉,不四舍五入 | |
% | 取余 | 从左到右 | 双目 |
| |
4 | + | 加 | 从左到右 | 双目 |
|
- | 减 | 从左到右 | 双目 |
| |
5 | << | 左移位运算符 | 从左到右 | 双目 |
|
>> | 带符号右移位运算符 | 从左到右 | 双目 |
| |
>>> | 无符号右移 | 从左到右 | 双目 |
| |
6 | < | 小于 | 从左到右 | 双目 | |
<= | 小于或等于 | 从左到右 | 双目 |
| |
> | 大于 | 从左到右 | 双目 |
| |
>= | 大于或等于 | 从左到右 | 双目 |
| |
instanceof | 确定某对象是否属于指定的类 | 从左到右 | 双目 |
| |
7 | == | 等于 | 从左到右 | 双目 | |
!= | 不等于 | 从左到右 | 双目 |
| |
8 | & | 按位与 | 从左到右 | 双目 |
|
9 | | | 按位或 | 从左到右 | 双目 |
|
10 | ^ | 按位异或 | 从左到右 | 双目 |
|
11 | && | 短路与 | 从左到右 | 双目 |
|
12 | || | 短路或 | 从左到右 | 双目 |
|
13 | ? : | 条件运算符 | 从右到左 | 三目 |
|
14 | = | 赋值运算符 | 从右到左 | 双目 |
|
+= | 混合赋值运算符 |
| |||
-= |
| ||||
*= |
| ||||
/= |
| ||||
%= |
| ||||
&= |
| ||||
|= |
| ||||
^= |
| ||||
<<= |
| ||||
>>= |
| ||||
>>>= |
|
public class Solution {
public int singleNumber(int[] A) {
int len = A.length;
int[] tmp = new int[32];
int result = 0;
for(int i = 0;i < 32;i++)
{
for(int j = 0; j < len; j++)
{
tmp[i] = tmp[i]+ ((A[j]>>i)&1);
}
result = result | ((tmp[i]%3)<<i);
}
return result;
}
}