您的位置:首页 > 其它

LintCode 落单的数 II

2016-10-15 15:43 281 查看
给出3*n + 1 个的数字,除其中一个数字之外其他每个数字均出现三次,找到这个数字。

解法:

位操作,统计所有数字各个位上数字的和,除以3取余就是落单数在这个位上的值

    int singleNumberII(vector<int> &A) {
        // write your code here
        int buf[32] = {0};
        for(int i = 0; i < A.size(); ++i) {
            addBuf(A[i], buf);
        }
        
        int target = 0;
        for(int i = 0; i < 32; ++i) {
            int val = buf[i] % 3;
            target = (val << i | target);
        }
        return target;
    }
    
    int addBuf(int num, int* buf) {
        for(int i = 0; i < 32; ++i) {
            buf[i] += (num >> i & 1);
        }
    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: