码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode--Single Number

时间:2016-01-14 22:17:42      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:

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

 

LeetCode--Single Number

标签:

原文地址:http://www.cnblogs.com/neversayno/p/5131749.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!