leetcode 136. Single Number

来源:互联网 发布:vb中csng是什么意思 编辑:程序博客网 时间:2024/06/05 23:55

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?

我想了半天也没想到如何不使用格外空间又线性的解法,于是去看solutions。原来!原来用异或!!

public class Single_Number_136 {public int singleNumber(int[] nums) {int num=0;for(int i=0;i<nums.length;i++){num=num^nums[i];}return num;}public static void main(String[] args) {// TODO Auto-generated method stubSingle_Number_136 s=new Single_Number_136();int[] a=new int[]{1,2,3,1,3};System.out.println(s.singleNumber(a));}}
因为A XOR A = 0 ,并且 XOR operator 满足交换律,所以顺序不会影响结果。
异或的性质:
1、交换律
2、结合律(即(a^b)^c == a^(b^c))
3、对于任何数x,都有x^x=0,x^0=x
4、自反性 A XOR B XOR B = A xor 0 = A

0 0
原创粉丝点击