首页 > 其他 > 详细

LeetCode.260.只出现一次的数III(灵活应用位运算)

时间:2021-01-16 01:04:50      阅读:31      评论:0      收藏:0      [点我收藏+]

原题链接

思路:数组中仅有两个元素出现一次,其余元素均出现两次,也就是说所有元素异或的结果就等于这两个元素异或的结果,异或某一位结果为1说明在这一位这两个数字的位不同(一个为1,另一个为0),因此我们可以选择该不同的位作为划分,以这两个数字的不同位为基准,将数组中该位为1的划分到其中一个组中,为零的划分到另一个组中,然后异或两个组得到最终答案,这样就保证了两个不同的数字在两个组中,其余相同的数字也在相同的组中。

参考代码

技术分享图片
 1 public int[] singleNumber(int[] nums) {
 2         int modNum = 0;
 3         int ans[] = new int[2];
 4         for(int num : nums) {
 5             modNum ^= num;
 6         }
 7         int h = 1;
 8         while((modNum & h) == 0) {
 9             h <<= 1;
10         }
11         for(int num : nums) {
12             if((num & h) == 0) {
13                 ans[0] ^= num;
14             } else {
15                 ans[1] ^= num;
16             }
17         }
18         return ans;
19     }
View Code

 

LeetCode.260.只出现一次的数III(灵活应用位运算)

原文:https://www.cnblogs.com/bianjunting/p/14284481.html

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