BitMap - leetcode [位运算]

Posted 会咬人的兔子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BitMap - leetcode [位运算]相关的知识,希望对你有一定的参考价值。

136. Single Number

因为A XOR A = 0,且XOR运算是可交换的,于是,对于实例{2,1,4,5,2,4,1}就会有这样的结果:

(2^1^4^5^2^4^1) => ((2^2)^(1^1)^(4^4)^(5)) => (0^0^0^5) => 5
异或:异为1

137. Single Number II(黑人问号脸)

对于除出现一次之外的所有的整数,其二进制表示中每一位1出现的次数是3的整数倍,将所有这些1清零,剩下的就是最终的数。用ones记录到当前计算的变量为止,二进制1出现“1次”(mod 3 之后的 1)的数位。用twos记录到当前计算的变量为止,二进制1出现“2次”(mod 3 之后的 2)的数位。当ones和twos中的某一位同时为1时表示二进制1出现3次,此时需要清零。即用二进制模拟三进制计算。最终ones记录的是最终结果。

int singleNumber(int A[], int n) {
    int ones = 0, twos = 0, xthrees = 0;
    for(int i = 0; i < n; ++i) {
        twos |= (ones & A[i]);
        ones ^= A[i];
        xthrees = ~(ones & twos);
        ones &= xthrees;
        twos &= xthrees;
    }

    return ones;
}

以上是关于BitMap - leetcode [位运算]的主要内容,如果未能解决你的问题,请参考以下文章

bitmap运算

大数据处理-Bitmap

LeetCode 371 两整数之和[位运算] HERODING的LeetCode之路

LeetCode 693 交替位二进制数[位运算 二进制] HERODING的LeetCode之路

LeetCode 342 4的幂[循环 递归 位运算] HERODING的LeetCode之路

LeetCode 540 有序数组中的单一元素[二分法 位运算] HERODING的LeetCode之路