BiruLyu
6/23/2017 - 11:24 PM

421. Maximum XOR of Two Numbers in an Array.java

public class Solution {
    public int findMaximumXOR(int[] nums) {
        int max = 0, mask = 0;
        for (int i = 31; i >=0; i--) {
            mask = mask | (1 << i);
            Set<Integer> set = new HashSet<Integer>();
            for (int num : nums) {
                set.add(num & mask);
            }
            int temp = max | (1 << i);
            for (int prefix : set) {
                if (set.contains(prefix ^ temp)) {
                    max = temp;
                    break;
                }
            }
        }
        return max;
    }
}