421.陣列中兩個數的最大異或值
阿新 • • 發佈:2019-01-27
給定一個非空陣列,陣列中元素為 a0, a1, a2, … , an-1,其中 0 ≤ ai < 231 。
找到 ai 和aj 最大的異或 (XOR) 運算結果,其中0 ≤ i, j < n 。
你能在O(n)的時間解決這個問題嗎?
示例:
輸入: [3, 10, 5, 25, 2, 8] 輸出: 28 解釋: 最大的結果是 5 ^ 25 = 28.
class Solution {
public:
int findMaximumXOR(vector<int>& nums) {
int res = 0, mask = 0;
for (int i = 31; i >= 0; --i) {
mask |= (1 << i);
unordered_set<int> s;
for (int num : nums) {
s.insert(num & mask);
}
int t = res | (1 << i);
for (int prefix : s) {
if (s.count(t ^ prefix)) {
res = t;
break;
}
}
}
return res;
}
};