【leetcode】Single Number II

来源:互联网 发布:mac 里照片怎么导出 编辑:程序博客网 时间:2024/06/12 01:41
class Solution {public:    int singleNumber(int A[], int n) {        // Note: The Solution object is instantiated only once and is reused by each test case.        int x[32];//记录A[]中的每一位        memset(x,0,sizeof(x));        for(int i=0;i<n;i++)        {            for(int j=0;j<32;j++)            {                x[j]+=(A[i]>>j)&(1);//将A[i]的第j位拎出来,看是否该位为1                x[j]%=3;            }        }                int ans=0;        for(int i=0;i<32;i++)        {            ans+=(x[i]<<i);//将x[i]乘以10的i方        }        return ans;    }};
public class Solution {      /**     * 其中ones记录了所有出现了模3余1次的bit,twos记录的是余2的。not_threes是当一个bit出现第3次的时候,把它清掉。     * 最后输出ones(如果题目中那个特殊的数出现了1次,当然如果是出现2次的话,应该输出twos     *      * @param A     * @return     */    public int singleNumber(int[] A) {        int once = 0;        int twice = 0;        for (int i = 0; i < A.length; i++) {            twice |= once & A[i];            once ^= A[i];            int not_three = ~(once & twice);            once = not_three & once;            twice = not_three & twice;        }        return once;    }}