82. 落单的数(打败100%)--给出 2 * n + 1个数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。

题目来源于LintCode
描述

给出 2 * n + 1个数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。

样例
样例 1:

输入:[1,1,2,2,3,4,4]
输出:3
解释:
仅3出现一次
样例 2:

输入:[0,0,1]
输出:1
解释:
仅1出现一次

解题:
思路:
通过异或运算来解决
相同为 0 不同为1

异或运算法则
  1. a ^ b = b ^ a
  2. a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c;
  3. a ^ b ^ a = b.

public class Solution {
    /**
     * @param A: An integer array
     * @return: An integer
     */
    public int singleNumber(int[] A) {
       // int a= ;
     if(A==null ||A.length<=0)
        return -1;
        int num=0;
    for(int i=0;i<A.length;i++){
        num^=A[i];//最终结果为唯一值
    }
    return num;
}
}

82. 落单的数(打败100%)--给出 2 * n + 1个数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。_第1张图片

你可能感兴趣的:(刷题,练习题)