题目
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?
答案
这题感觉像是利用xor性质的贪心算法
通过依次判断max的第31位, 第30位, ..., 第0位是否可以为1来实现。
class Solution {
public int findMaximumXOR(int[] nums) {
int mask = 0, max = 0;
for(int i = 31; i >= 0; i--) {
Set<Integer> set = new HashSet<>();
mask = mask | (1 << i);
for(int a : nums) {
set.add(mask & a);
}
int temp_mask = max | (1 << i);
for(int a : set) {
int b = a ^ temp_mask;
if(set.contains(b)) {
max = temp_mask;
break;
}
}
}
return max;
}
}
网友评论