Lintcode 落单的数 II

来源:互联网 发布:13.3英寸笔记本知乎 编辑:程序博客网 时间:2024/03/29 02:21

给出3*n + 1 个的数字,除其中一个数字之外其他每个数字均出现三次,找到这个数字。

样例

给出 [1,1,2,3,3,3,2,2,4,1] ,返回 4

挑战 

一次遍历,常数级的额外空间复杂度

分析:

三个数相同,则我们将每一个数的二进制中对应位的1的个数都加起来放在数组numberofOne中,然后对数组每一个元素%3则得到单个数的二进制表示,然后求出该二进制的十进制返回函数即可。

class Solution {public:/** * @param A : An integer array * @return : An integer  */    int singleNumberII(vector<int> &A) {        // write your code here        if(A.empty())        return 0;        int n=A.size();        int singleNumber=0;        const int size=33;        int numberofOne[size]={0};        for(int i=0;i<32;i++){            for(int j=0;j<n;j++){                if(A[j]>>i&1)                numberofOne[i]++;            }            numberofOne[i]%=3;            singleNumber+=numberofOne[i]*pow(2,i);        }        return singleNumber;    }};


如有问题请留言。

如有帮助请顶一个,你们的支持是我最大的动力。

文章均可以转载,但请注明文章链接,谢谢。

0 0
原创粉丝点击