Skip to content

421. Maximum XOR of Two Numbers in an Array

Difficulty Topics

Description

Given an integer array nums, return the maximum result of nums[i] XOR nums[j], where 0 <= i <= j < n.

 

Example 1:

Input: nums = [3,10,5,25,2,8]
Output: 28
Explanation: The maximum result is 5 XOR 25 = 28.

Example 2:

Input: nums = [14,70,53,83,49,91,36,80,92,51,66,70]
Output: 127

 

Constraints:

  • 1 <= nums.length <= 2 * 105
  • 0 <= nums[i] <= 231 - 1

Solution

maximum-xor-of-two-numbers-in-an-array.py
class Solution:
    def findMaximumXOR(self, nums: List[int]) -> int:
        mask = res = 0

        for i in range(31, -1, -1):
            mask = mask | (1 << i)

            sset = set()
            for num in nums:
                sset.add(num & mask)

            desired = res | (1 << i)
            for prefix in sset:
                anotherSum = prefix ^ desired

                if anotherSum in sset:
                    res = desired
                    break

        return res