Given a non-empty array of numbers, a0, a1, a2, … , an-1, where 0 ≤ ai < 231.
Find the maximum result of ai XOR aj, where 0 ≤ i, j < n. Could you do this in O(n) runtime? Example: Input: [3, 10, 5, 25, 2, 8] Output: 28 Explanation: The maximum result is 5 ^ 25 = 28. 分别计算每一位应该是什么
public int findMaximumXOR(int[] nums) { int max = 0, mask = 0; for (int i = 31; i >= 0; i--) { //从最重要的位MSB看起 mask = mask | 1 << i; // 每次只看一位,用mask控制看哪位 Set<Integer> set = new HashSet(); for (int num : nums) { set.add(num & mask); //记录所有nums在这一位是什么情况 } int tmp = max | (1 << i); //结果在当前位暂时设为1 for (int prefix : set) { if (set.contains(tmp ^ prefix)) { max = tmp; //如果有在这一位有和max不同的,那么max在这一位就真的可以是1 break; } } } return max; }