java-异或运算

 

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

说明:

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
    异或运算法则

  1. a ^ b = b ^ a
  2. a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c;
  3. d = a ^ b ^ c 可以推出 a = d ^ b ^ c.
  4. a ^ b ^ a = b.
使用异或运算,将所有值进行异或
异或运算,相异为真,相同为假,所以 a^a = 0 ;0^a = a
因为异或运算 满足交换律 a^b^a = a^a^b = b 所以数组经过异或运算,单独的值就剩下了
 public void test2() {
        int[] nums = new int[]{4, 1, 2, 1, 2};
        int a = 0;
//        for (int i = 0; i < nums.length; i++) {
//            a = nums[i] ^ a;
//        }
        for (int num : nums) {
            a ^= num;
        }
        System.out.println(a);
    }

给TA打赏
共{{data.count}}人
人已打赏
知识碎片

java学习笔记-二分查找

2022-1-5 21:47:26

共享资源知识碎片

酸性风格素材分享

2022-1-17 18:16:24

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧