421. 数组中两个数的最大异或值 (中等,位运算)

题目越短越难啊

  1. 关键在于要明白如果我们已经知道有一些组合进行异或运算能得到最高位为1的结果,那么最终答案必定在这些组合之中
  2. 其次异或运算有个性质,a=b XOR c 等价于 b=a XOR c,因此对于第 k 位能否取到 1 的情况,我们只需要用 2k 去和每一个nums[i] 作异或运算,然后通过哈希表(把所有的nums塞入表中)查找耗时 O(1) 的性质去找 nums[i] 是否存在,所以最终的耗时为 O(nk),其中 k 为最高位的位数
python 复制代码
class Solution:
    def findMaximumXOR(self, nums: List[int]) -> int:
        # 最高位的二进制位编号为 30
        HIGH_BIT = 30

        x = 0
        for k in range(HIGH_BIT, -1, -1):
            seen = set()
            # 将所有的 pre^k(a_j) 放入哈希表中
            for num in nums:
                # 如果只想保留从最高位开始到第 k 个二进制位为止的部分
                # 只需将其右移 k 位
                seen.add(num >> k)

            # 目前 x 包含从最高位开始到第 k+1 个二进制位为止的部分
            # 我们将 x 的第 k 个二进制位置为 1,即为 x = x*2+1
            x_next = x * 2 + 1
            found = False
            
            # 枚举 i
            for num in nums:
                if x_next ^ (num >> k) in seen:
                    found = True
                    break

            if found:
                x = x_next
            else:
                # 如果没有找到满足等式的 a_i 和 a_j,那么 x 的第 k 个二进制位只能为 0
                # 即为 x = x*2
                x = x_next - 1
        
        return x
相关推荐
xlq2232234 分钟前
22.多态(上)
开发语言·c++·算法
666HZ66636 分钟前
C语言——高精度加法
c语言·开发语言·算法
Wise玩转AI41 分钟前
Day 27|智能体的 UI 与用户交互层
人工智能·python·ui·ai·chatgpt·ai智能体
sweet丶43 分钟前
iOS MMKV原理整理总结:比UserDefaults快100倍的存储方案是如何炼成的?
算法·架构
s***46981 小时前
【玩转全栈】----Django模板语法、请求与响应
数据库·python·django
云里雾里!2 小时前
力扣 209. 长度最小的子数组:滑动窗口解法完整解析
数据结构·算法·leetcode
runepic2 小时前
Python + PostgreSQL 批量图片分发脚本:分类、去重、断点续拷贝
服务器·数据库·python·postgresql
codists2 小时前
2025年11月文章一览
python
生而为虫2 小时前
31.Python语言进阶
python·scrapy·django·flask·fastapi·pygame·tornado
言之。2 小时前
Claude Code 实用开发手册
python