Leetcode 剑指 Offer II 067.数组中两个数的最大异或值

题目难度: 中等

原题链接

今天继续更新 Leetcode 的剑指 Offer(专项突击版)系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~

题目描述

给定一个整数数组 nums ,返回 nums[i] XOR nums[j] 的最大运算结果,其中 0 ≤ i ≤ j < n 。

示例 1:

  • 输入:nums = [3,10,5,25,2,8]
  • 输出:28
  • 解释:最大运算结果是 5 XOR 25 = 28.

示例 2:

  • 输入:nums = [0]
  • 输出:0

示例 3:

  • 输入:nums = [2,4]
  • 输出:6

示例 4:

  • 输入:nums = [8,10,2]
  • 输出:10

示例 5:

  • 输入:nums = [14,70,53,83,49,91,36,80,92,51,66,70]
  • 输出:127

提示:

  • 1 <= nums.length <= 2 * 10^5
  • 0 <= nums[i] <= 2^31 - 1
  • 进阶:你可以在 O(n) 的时间解决这个问题吗?

题目思考

  1. 如何优化时间复杂度?

解决方案

思路
  • 分析题目, 一个最直接的思路就是两重循环求每个数字对的异或值, 从而得到最大值
  • 不过这样做的时间复杂度达到了 O(N^2), 按照题目规模肯定会超时, 如何优化呢?
  • 假设数组的最大异或值 x=ai^aj, 那么一定有 pk(x)=pk(ai)^pk(aj) (pk(n)表示 n 的前 k 位)
  • 根据异或结合律, 则有 pk(ai)=pk(x)^pk(aj), 我们可以利用集合判断当前 pk(x)的最低位应该是 1 还是 0, 具体步骤如下:
    1. 令 res 记录最大异或值的当前前缀部分 pk(x), 初始化为 0
    2. 然后按照前缀长度从小到大的顺序遍历
    3. 对于前缀长度 k, 遍历所有数字, 右移 k 位求出对应的前缀, 并加入集合中
    4. 接下来假设最大异或值的这一位是 1, 也即 res 左移一位并加 1
    5. 再遍历所有数字, 将 res 与对应数字的前缀异或
    6. 如果某个异或的结果在当前前缀集合里, 则说明该位真的可以为 1, 即满足pk(ai)=pk(x)^pk(aj), 跳出循环
    7. 如果遍历结束仍未找到, 则说明不存在某个异或结果在前缀集合中, 该位只能为 0, 将 res 减去 1
    8. 最后, 遍历完所有前缀长度后的 res 即为所求
  • 下面代码中有详细的注释, 方便大家理解
复杂度
  • 时间复杂度 O(N): 外层循环次数是常数, 内层循环每次只需要遍历整个数组一遍
  • 空间复杂度 O(N): 需要额外的集合存储每次遍历的所有数字前缀
代码
class Solution:def findMaximumXOR(self, nums: List[int]) -> int:res = 0for k in range(32)[::-1]:v = set()for x in nums:# 将所有数字的pk前缀加入集合v.add(x >> k)# 先假设当前位可以为1res = (res << 1) + 1for x in nums:if res ^ (x >> k) in v:# res与该前缀的异或结果已经在集合中了, 说明最终最大异或值的这一位是1breakelse:# 异或结果不在前缀集合中, 这一位只能为0res -= 1return res

大家可以在下面这些地方找到我~😊

我的 GitHub

我的 Leetcode

我的 CSDN

我的知乎专栏

我的头条号

我的牛客网博客

我的公众号: 算法精选, 欢迎大家扫码关注~😊

算法精选 - 微信扫一扫关注我

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/503452.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java玩转《啊哈算法》之模拟链表

人应该支配习惯&#xff0c;而绝不是让习惯支配人。一个人要是不能改掉坏习惯&#xff0c;那么他就一文不值。 目录 缘代码地址模拟链表创建遍历打印插入插入优化 完整代码 缘 各位小伙伴们好呀&#xff01;本人最近看了下《啊哈算法》&#xff0c;写的确实不错。 但稍显遗憾…

C#,K-均值(K-Means)聚类算法的核心源代码

一、詹姆斯麦昆&#xff08;James MacQueen&#xff09; IMS研究员詹姆斯B麦昆于2014年7月15日病逝&#xff0c;享年85岁。他的妻子安和他们的三个孩子唐纳德、凯特和玛丽以及五个孙子孙女幸存下来。 从1962年到去世&#xff0c;麦昆教授一直在加州大学洛杉矶分校管理研究生院…

软考 系统分析师系列知识点之需求获取(7)

所属章节&#xff1a; 第11章. 软件需求工程 第2节. 需求获取 需求获取是一个确定和理解不同的项目干系人的需求和约束的过程。需求获取是一件看上去很简单、做起来却很难的事情。需求获取是否科学、准备是否充分&#xff0c;对获取出来的结果影响很大&#xff0c;这是因为大部…

图书推荐||Word文稿之美

让你的文档从平凡到出众&#xff01; 本书内容 《Word文稿之美》是一本全面介绍Word排版技巧和应用的实用指南。从初步认识数字排版到高效利用模板、图文配置和表格与图表的排版技巧&#xff0c;再到快速修正错误和保护文件&#xff0c;全面系统地讲解数字排版的技术和能力&…

[剪藏] - 瑞萨收购Altium!

2024年2月15日消息&#xff0c;瑞萨电子公司近日表示计划以每股68.50澳元&#xff0c;总额 91 亿澳元&#xff08;约合 59 亿美元&#xff09;收购 PCB 设计软件公司 Altium的所有流通股&#xff08;企业价值为88亿澳元&#xff09;&#xff0c;此举不禁让人联想到西门子 2017 …

鼠标失灵怎么办?电脑出现鼠标失灵的详细处理方法介绍

无论是笔记本电脑还是台式机电脑&#xff0c;鼠标是必不可少的外设之一&#xff0c;而我们在使用电脑的过程中&#xff0c;经常回遇到鼠标突然失灵了&#xff0c;不听使唤&#xff0c;控制不了&#xff0c;接下小编来与大家一起分享&#xff0c;遇到这种情况我们该怎么办 有时…

YOLO v9训练自己数据集

原以为RT-DETR可以真的干翻YOLO家族&#xff0c;结果&#xff0c;&#xff01;&#xff01;&#xff01;&#xff01; 究竟能否让卷积神经网络重获新生&#xff1f; 1.数据准备 代码地址&#xff1a;https://github.com/WongKinYiu/yolov9 不能科学上网的评论区留言 数据集…

社交APP开发能给用户带来什么

现在的社交软件也非常的多&#xff0c;每款社交软件都有自己的特色&#xff0c;社交软件是日常中必备的软件&#xff0c;不管是生活交流还是感情工作交流都是比较方便的&#xff0c;因为社交软件满足了日常的远程交流问题&#xff0c;所以开发社交软件也会逐渐的流行起来的。 …

Cloud整合Zookeeper代替Eureka

微服务间通信重构与服务治理笔记-CSDN博客 Zookeeper是一个分布式协调工具,可以实现注册中心功能 安装Zookeeper 随便 就用最新版本吧 进入Zookeeper 包目录 cd /usr/local/develop/ 解压 tar -zxvf apache-zookeeper-3.9.1-bin.tar.gz -C /usr/local/develop 进入配置文件…

USB4之ASM2464PD与ASM2464PDX兼容与运用

首先在NVMe上运用: 一&#xff1a;ASM2464PD&#xff08;现在可以做带PD的方案&#xff09; 二&#xff1a;ASM2464PDX 1&#xff1a; Application Guide- CFX card reader NVMe SSD 2&#xff1a;ASM2464PDX Application Guide- NVMe SSD x4 with data clone 三&#xff…

摄像头工程师说 Camera - 颜色空间 YUV 与 YCbCr 的区别与联系(4)

摄像头工程师说 Camera - 数据格式 YUV 与 YCbCr 的区别与联系&#xff08;4&#xff09; 概述 上回书咱们说到 摄像头工程师说 Camera - 数据格式 YUV 格式的存储&#xff08;3&#xff09; 本节咱们说说YUV 与 YCbCr 两种色彩空间定义的联系与区别。 相同点&#xff1a; Y…

嵌入式驱动学习第一周——linux的休眠与唤醒

前言 本文介绍进程的休眠与唤醒。 嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程&#xff0c;未来预计四个月将高强度更新本专栏&#xff0c;喜欢的可以关注本博主并订阅本专栏&#xff0c;一起讨论一起学习。现在关注就是老粉啦&#xff01; 行文目录 前言1. 阻塞和非阻…