特别好位运算maximum-xor-of-two-numbers-in-an-array

Posted 笨鸟居士的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了特别好位运算maximum-xor-of-two-numbers-in-an-array相关的知识,希望对你有一定的参考价值。

https://leetcode.com/problems/maximum-xor-of-two-numbers-in-an-array/

利用了异或的”自反性“: a ^ b = c,而a ^ b ^ b = a, 则 c ^ b = a

其他运算定律有:交换律、结合律、分配律。

// 非常非常棒
// 参考了 https://discuss.leetcode.com/topic/63213/java-o-n-solution-using-bit-manipulation-and-hashmap
// 特别的,利用了异或的强大运算特性,见22行,来加速运算

public class Solution {
        public int findMaximumXOR(int[] nums) {
        int max = 0;
        int flag = 0;
        
        // from left to right
        for (int i=31; i>=0; i--) {
            Set<Integer> prefixSet = new HashSet();
            // flag : 11110000
            flag = flag | (1<<i);
            for (int num : nums) {
                prefixSet.add(num & flag);
            }

            // tmp, max: 10101000000, add more 1 
            int tmp = max | (1<<i);
            for (int prefix : prefixSet) {
                // 利用了 ^ 的 a ^ b = c,则 b ^ c = a
                if (prefixSet.contains(tmp ^ prefix)) {
                    max = tmp;
                    break;
                }
            }
        }
        return max;
    }
}

 

以上是关于特别好位运算maximum-xor-of-two-numbers-in-an-array的主要内容,如果未能解决你的问题,请参考以下文章

如何在剃刀中使用三元运算符(特别是在 HTML 属性上)?

是啥!!运算符在 R 中的意思,特别是在上下文中 !!sym("x")

c语言中怎么处理一个特别大的数据的运算

程序循环特别慢数据量大怎么办

c++本地示例045取年

excel vba 在sheet多的时候运行特别慢