首页 > 编程语言 > 详细

算法中:异或运算符

时间:2020-05-15 09:06:06      阅读:42      评论:0      收藏:0      [点我收藏+]

  例如:2^3。

  首先将2转为二进制 01

  3转为二进制 11

  它们进行比较:

  技术分享图片

 所以2^3=1

 

 备注:如果相同的数计算抑或,则为0

 

有一道关于抑或的题:

  技术分享图片

 原来我是这么写的:

 1    /*O(n²)*/
 2     public int singleNumber1(int[] nums) {
 3         for (int i = 0; i < nums.length; i++) {
 4             // 是否重复
 5             boolean flag = false;
 6             for (int j = 0; j < nums.length; j++) {
 7                 if (i == j) {
 8                     continue;
 9                 }
10                 if (nums[i] == nums[j]) {
11                     flag = true;
12                     break;
13                 }
14             }
15             if (!flag) {
16                 return nums[i];
17             }
18         }
19         return -1;
20     }

但是后面发现很多人都用异或,异或中可以发现一个规律:

1 System.out.println(4 ^ 1 ^ 2 ^ 2 ^ 1);// 4
2 System.out.println(3 ^ 1 ^ 2 ^ 2 ^ 1);// 3
3 System.out.println(1 ^ 2 ^ 2 ^ 1 ^ 5);// 5
4 System.out.println(1 ^ 2 ^ 2 ^ 1 ^ 8);// 8

 

如果运算中,满足这个规则,A^B^B,那么结果一定是没有成对出现的A,然后回看那道题。

找出单独存在的元素,除开这个单独的元素,其他的元素都是成对出现的,所以可以使用异或来操作,代码如下:

1  public int singleNumber2(int[] nums) {
2         int result = 0;
3         for (int i = 0; i < nums.length; i++) {
4             result ^= nums[i];
5         }
6         return result;
7 }

 

算法中:异或运算符

原文:https://www.cnblogs.com/daihang2366/p/12892257.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!