Single Number II


問題:找出只出現一次的數,其他數出現了三次
分析:將數轉化為二進制的位,數出現了三次相當於其對應的二進制上每個位置出現了3次,這里有個抽象的地方就是,例如數中包含1,3兩個其二進制的第一位都包含1,
         怎么區分,其實並不需要區分,無論是數字3的還是數字1的二進制第一位的1都無所謂,因為我們完全可以將其認為總共是6次,無論先用的數字3的還是用的數字1的,
         都能將該位置湊夠兩組重復了3次的1

class Solution {
public:
    int singleNumber(int A[], int n) {
        int one,two,three;
        one=two=three=0;
        for(int i=0;i<n;i++)
        {//一定是出現3次,2次,1次這樣的順序,如果反過來的話,先更新了one的話,會影響到two和three的
            three =  two & A[i];//已經出現了兩次,還出現了一次
            two = two | one & A[i];//出現了1次又出現了1次,在加上以前已經出現了2次的,為新的出現了2次的
            one = one | A[i];//出現了1次
            //將出現3次的其出現1次2次全部抹去
            one = one & ~three;
            two = two & ~three;
        }
         return one;
    }
};

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM