码迷,mamicode.com
首页 > 其他好文 > 详细

Single Number && Single NumberII

时间:2015-04-10 08:15:03      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:

这两个题,都是用bit operation解决的,但是第二个稍微tricky一点。

先说第一个,我们利用XOR, 如果一个数字出现两次,那么在每一位上,两两抵消。唯独那个只出现一次的,没有另一半和它抵消了。。所以就剩下了。

 1     public int singleNumber(int[] A) {
 2         if (A == null) {
 3             return 0;
 4         }
 5         int ret = 0;
 6         for (int i = 0; i < A.length; i++) {
 7             ret = ret ^ A[i];
 8         }
 9         return ret;
10     }

Single NumberII 

这时再使用一的方法,就不好用了。怎么才能过滤掉出现三次的情况呢? 我们对这些数字的每一位出现的次数计数。如果出现三次,则归零。实现起来就是,该位一的个数就是:count % 3.

 1 public int singleNumber(int[] A) {
 2         if (A == null || A.length == 0) {
 3             return 0;
 4         }
 5         int res = 0;
 6         for (int i = 0; i < 32; i++) {
 7             int sum = 0;
 8             for (int j = 0; j < A.length; j++) {
 9                 if (((A[j] >>> i) & 1) == 1) {
10                     sum++;
11                     sum = sum % 3;
12                 }
13             }
14             res |= sum << i;
15         }
16         return res;
17     }

 

Single Number && Single NumberII

标签:

原文地址:http://www.cnblogs.com/gonuts/p/4413444.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!