leetCode: Single Number II [137]

來源:互聯網
上載者:User

標籤:leetcode   演算法   面試   

【題目】

Given an array of integers, every element appears three times except for one. Find that single one.

Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?


【題意】

    給定一個整數以外,其中除了一個整數只出現一次以外,其他都整數都出現3次,找出那個出現一次的數
    要求線性複雜度,不適用額外的空間?


【思路】

        類比三進位運算
        three, two, one     分別表示當前是否已經出現了3個1, 2個1, 1個1
        0       0   0       表示沒有出現1
        0       0   1       表示出現了1個1
        0       1   0       表示出現了2個1
        0       1   1       表示出現了3個1,這時我們需要把它轉化成
        1       0   0       也就是3進位計算的結果,我們得到three=1,然後把two和one清0
        
        各位的迭代關係如下:
        two = (one & A[i]) | two    已經出現了一個1,這次又出現了一個1 或者 這次出現的不是1,但是本來就已經有兩個1了
        one = one ^ A[i]            如果本來就有一個1了,這次又出現一個1,那麼這我們需要向two進一位(也就是上一步,將two設成1),這是我們需要將one清為0
        three = two & one           如果已經出現了3個1,則three為1,此時需要將two和one清0

    


【代碼】
class Solution {public:    int singleNumber(int A[], int n) {        int one=0;        int two=0;        int three=0;                for(int i=0; i<n; i++){            two= (one & A[i]) | two;            one= one ^ A[i];            three = one & two;                        // three=1表示1已經出現了3此,two和one需要清空            two &= ~three;            one &= ~three;        }        return one;    }};


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.