首页 > 代码库 > 【特别好】【位运算】maximum-xor-of-two-numbers-in-an-array
【特别好】【位运算】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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。