题目:Given an array of integers, every element appears twice except for one. Find that single one.
注意:这个数组没有说是固定的顺序
思路:import java.util.Arrays;
public class SingleNum {
public int singleNumber(int[] nums) {
int r = 0;
for (int x : nums) {
r = r ^ x; //这里使用的是异或运算,其有两个大的特性:1、a=0^a;
//2、a^b = b^a ; 满足交换律,那么在混乱次序(1,2,3,4,3,2,1)的时候,
//可以将其先排成(1,1,2,2,3,3,4),然后运用性质1来做,返回即是;
}
return r;
}
}
做题的时候,顺便把Java的按位运算逻辑学习了一下,很有感受。现总结如下:
1、异或操作:a^b, "相同的为0,不同的为1" 。
性质:
(1)这里的A,B,P的位置是可以互换的!!!(同或也是可以)
(2)若需要交换两个变量的值,除了通常使用的借用中间变量进行交换外,还可以利用异或,仅使用两个变量进行交换,如:a=a^b;
b=b^a;
a=a^b;(好用!)
(3) A: a^0 =a;
B : a ^b ^c = a ^ (b ^ c) = (a ^ b) ^ c; (结合律)
C: a ^ b ^ a = b ; (变换位置)
D: d = a ^ b^ c 可以推出 a = d ^ b ^ c;
2、同或操作(异或的非):!(a^b), "相同的为1,不同的为0"
3、与(串联): a&&b ,
4、或(并联): a||b ,
5、非(否): !a ,
转自: http://blog.csdn.net/is_zhoufeng/article/details/8112199
http://baike.baidu.com/link?url=bfglXE4Luul-a9zeYR60VwOZ85Z491ejH1KRdwNA_BXaIhU6whX6a8PdeIDKXEZtGaJaEDUSVr8sTOIgIHS15Lb24fpK590ZBfQjlKfOIOwFvQXQ4hGVTHk7XqvtBpjF