自己不会做,连解答都看的比较吃力
对位运算还是不太熟悉,常见技巧在位运算场景中容易用不出来
一姐讲解视频:
https://www.bilibili.com/video/BV1pr4y1c7B8?from=search&seid=8501163236722907377
/**
* Runtime: 248 ms, faster than 35.69%
* Memory Usage: 62.3 MB, less than 48.77%
*/
class Solution {
public int findMaximumXOR(int[] nums) {
int max = 0, mask = 0;
for (int i = 30; i >= 0; i--) { // the higher the number of bits, the higher the priority and should be satisfied first; i starts from 30 because nums[i] is always non-negative, as is given by Description
mask |= 1 << i;
HashSet<Integer> set = new HashSet(); // trade space for time
for (int num : nums) {
set.add(num & mask);
}
int expectedMax = max | 1 << i;
for (int maskedNum : set) {
if (set.contains(maskedNum ^ expectedMax)) { // a ^ b == c <==> a ^ c == b, which is the feature of XOR
max = expectedMax;
}
}
}
return max;
}
}