LintCode 落单的数 II

来源:互联网 发布:php 怎么调用静态方法 编辑:程序博客网 时间:2024/05/16 23:42

给出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);        }    }


0 0
原创粉丝点击