原题链接:https://leetcode-cn.com/problems/maximum-xor-of-two-numbers-in-an-array/
1、方法一:暴力法
func findMaximumXOR(nums []int) int {
res := 0
for i := 1; i < len(nums); i++ {
for j := 0; j < i; j++ {
res = max(res, nums[i] ^ nums[j])
}
}
return res
}
func max(a int, b int) int {
if a > b {
return a
} else {
return b
}
}
2、方法二:二进制前缀树
type tree struct {
left, right *tree
}
func findMaximumXOR(nums []int) int {
L := 30
root := &tree{}
for _, num := range nums {
curr := root
for j := L; j >= 0; j-- {
v := (num >> j) & 1
if v == 0 {
if curr.left == nil {
curr.left = &tree{}
}
curr = curr.left
} else {
if curr.right == nil {
curr.right = &tree{}
}
curr = curr.right
}
}
}
res := 0
for _, num := range nums {
curr := root
total := 0
for i := L; i >= 0; i-- {
v := (num >> i) & 1
if v == 0 {
if curr.right != nil {
curr = curr.right
total = total * 2 + 1
} else {
curr = curr.left
total = total * 2
}
} else {
if curr.left != nil {
curr = curr.left
total = total * 2 + 1
} else {
curr = curr.right
total = total * 2
}
}
}
res = max(res, total)
}
return res
}
func max(a, b int) int {
if a > b {
return a
}
return b
}