您的位置:首页 > 其它

LeetCode --Single Number

2015-01-09 16:23 459 查看

Single Number:
Given an array of integers, every element appears twice except for one. Find that single one.
Note:

Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
题目大概意思是在一个整型数组中,找到唯一一个出现一次的元素,其他的都出现两次。要求是时间复杂度为线性,最好不使用额外空间。
按位异或运算符^
参与运算的两个值,如果两个相应位相同,则结果为0,否则为1。即:0^0=0, 1^0=1, 0^1=1, 1^1=0
例如:10100001^00010001=10110000
   0^0=0,0^1=1 0异或任何数=任何数
   1^0=1,1^1=0 1异或任何数=任何数取反
   任何数异或自己=把自己置0
(1)按位异或可以用来使某些特定的位翻转,如对数10100001的第2位和第3位翻转,可以将数与00000110进行按位异或运算。                     10100001^00000110=10100111 //1010 0001 ^ 0x06 = 1010 0001 ^ 6
(2)通过按位异或运算,可以实现两个值的交换,而不必使用临时变量。
例如交换两个整数a,b的值,可通过下列语句实现:
a=10100001,b=00000110
a=a^b;   //a=10100111
b=b^a;   //b=10100001
a=a^b;   //a=00000110
(3)异或运算符的特点是:数a两次异或同一个数b(a=a^b^b)仍然为原值a.
最终解决方法代码如下:
public static int singleNumber(int[] A) {
int x=0;
for(int a: A){
x = x ^ a;
}
return x;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: