zoukankan      html  css  js  c++  java
  • 位运算 的探究

    由于博主是在工作的闲余时间持续写文章的,所以只有这里 位运算 的探究 [http://github.tiankonguse.com/blog/2014/10/10/bit-operation/]有最新的更新,其他地方只是文章的初稿,往往不完整。

    PS:更新时间 2014-10-22.

    由于有人没看明白起初的O(n)操作, 所以这里就先简单的介绍一下 O(n log(n))的做法.
    我这里添加上基本的做法, 然后把O(n)做法的分析写的更详细了一个, 明白的人可能看起来比较啰嗦, 抱歉了.
    另外有人问假设是大部分都是4个相同, 只有一个是2个相同怎么做, 这个问题我们可以称为4-2问题.
    这样的话这篇文章主要讲解的就是3-1问题了.

    为了不偏离主题, 我重新写一篇文章专门讨论 n-m 问题.
    如果你不想看基本做法, 可以直接跳到 问题的来源 的位置, 向下滚动的时候, 应该可以看到有个目录, 点击 问题的来源 即可.

    学弟发给我一个代码, 第一眼竟然没看明白.

    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;
    }
    

      

    然后想到, 可能有位运算的一些规律, 比如分配率, 结合律, 交换律等.

    等待更新中。。。

  • 相关阅读:
    1292
    explicit_defaults_for_timestamp
    比较好的平台工具
    git回退到指定版本的代码
    解决catalina.out文件过大的方法
    json字符串转化成对象列表数据
    Java LIST做批量分组切割
    Activiti数据库表结构
    MySQL修改数据库时区
    集合工具类的使用
  • 原文地址:https://www.cnblogs.com/tiankonguse/p/4045104.html
Copyright © 2011-2022 走看看