位運算 的探究

因爲博主是在工做的閒餘時間持續寫文章的,因此只有這裏 位運算 的探究 [http://github.tiankonguse.com/blog/2014/10/10/bit-operation/]有最新的更新,其餘地方只是文章的初稿,每每不完整。git

PS:更新時間 2014-10-22.github

因爲有人沒看明白起初的O(n)操做, 因此這裏就先簡單的介紹一下 O(n log(n))的作法.
我這裏添加上基本的作法, 而後把O(n)作法的分析寫的更詳細了一個, 明白的人可能看起來比較囉嗦, 抱歉了.
另外有人問假設是大部分都是4個相同, 只有一個是2個相同怎麼作, 這個問題咱們能夠稱爲4-2問題.
這樣的話這篇文章主要講解的就是3-1問題了.blog

爲了避免偏離主題, 我從新寫一篇文章專門討論 n-m 問題.
若是你不想看基本作法, 能夠直接跳到 問題的來源 的位置, 向下滾動的時候, 應該能夠看到有個目錄, 點擊 問題的來源 便可.get

 

學弟發給我一個代碼, 第一眼居然沒看明白.it

int run(int n, int* A) {
    int ones = 0;// 出現一次的標誌位
    int twos = 0;// 出現第二次標誌位
    for(int i = 0; i < n; i++) {
        ones = (ones ^ A[i]) & ~twos;// 第二次出現的去掉, 第一次出現的加上, 第三次出現的不變
        twos = (twos ^ A[i]) & ~ones;// 第一次出現的不變, 第二次出現的加上, 第三次出現的去掉
    }
    return ones;
}

  

而後想到, 可能有位運算的一些規律, 好比分配率, 結合律, 交換律等.io

 

等待更新中。。。class

相關文章
相關標籤/搜索