LintCode刷题:82· 落单的数I
描述:
给出 2 * n + 1
个数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。
样例:
输入:A = [1,1,2,2,3,4,4]
输出:3
思路:
利用异或位运算的性质:任何数与自身异或的结果为0,0异或任何数等于任何数。
我们只需遍历数组中的每一个元素,并将其进行异或。因为,异或满足交换律和结合律,所以最终的异或结果将仅仅包含只出现一次的那个数。
代码:
/** * @author Fahaxiki * @date 2021-05-25 */ public class Solution { public static int singleNumber(int[] A) { if(A == null || A.length == 0) { return -1; } int result = 0; for (int value : A) { // ^= 按位异或运算符 result ^= value; } return result; } }