码迷,mamicode.com
首页 > 编程语言 > 详细

剑指offer——04二维数组中的查找

时间:2019-10-20 16:11:05      阅读:84      评论:0      收藏:0      [点我收藏+]

标签:data   col   color   style   bsp   bit   三次   个数   ndt   

题目:

数组中唯一只出现一次的数字。
在一个数组中除一个数字只出现一次之外,其他数字都出现了三次。
请找出那个只出现一次的数字。

 

题解:

如果一个数字出现三次,那么它的二进制表示的每一位(0或者1)也出现三次。如果把所有出现三次的数字的二进制表示的每一位都分别加起来,那么每一位的和都能被3整除。
我们把数组中所有数字的二进制表示的每一位都加起来。如果某一位的和能被3整除,那么那个只出现一次的数字二进制表示中对应的那一位是0;否则就是1。

 

 1 class Solution
 2 {
 3 public:
 4     int findTheOnlyNum(vector<int>data)
 5     {
 6         if (data.size() == 0)return 0;
 7         for (auto a : data)    calTheBits(a);
 8         int res = 0;
 9         for (int i = 0; i < 32; ++i)
10             if (bits[i] % 3 == 1)res += pow(2, i);
11         return res;
12     }
13 private:
14     int bits[32] = { 0 };
15     void calTheBits(int num)
16     {
17         int n = 1;
18         for (int i = 0; i < 32; ++i)
19         {
20             if (num & n)bits[i]++;
21             n = n << 1;
22         }
23     }
24 };

 

剑指offer——04二维数组中的查找

标签:data   col   color   style   bsp   bit   三次   个数   ndt   

原文地址:https://www.cnblogs.com/zzw1024/p/11707762.html

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