123456789101112131415161718 |
- func findMaximumXOR(nums []int) int {
- max, mask := 0, 0
- for i := 31; 0 <= i; i-- { // Check max & 1<<i is 1 or 0
- m := make(map[int]bool)
- mask |= 1 << uint(i)
- for _, n := range nums {
- m[n&mask] = true // Get the top n digit of nums as prefix set
- }
- tmp := max | 1<<uint(i) // Assume that c == max | 1<<i, for each a, find if b is in prefix set
- for k := range m {
- if _, ok := m[tmp^k]; ok {
- max = tmp
- break
- }
- }
- }
- return max
- }
|