位运算 的探究

因为博主是在工做的闲余时间持续写文章的,因此只有这里 位运算 的探究 [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

相关文章
相关标签/搜索