LeetCode--Single Number

题目: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

态度决定行为,行为决定习惯,习惯决定性格,性格决定命运
原文地址:https://www.cnblogs.com/neversayno/p/5131749.html