【LeetCode】每日一题 2023_11_4 数组中两个数的最大异或值

news2024/11/25 0:53:49

文章目录

  • 刷题前唠嗑
  • 题目:数组中两个数的最大异或值
    • 题目描述
    • 代码与解题思路
  • 结语

刷题前唠嗑


LeetCode? 启动!!!

题目:数组中两个数的最大异或值

题目链接:421. 数组中两个数的最大异或值

题目描述

代码与解题思路

func findMaximumXOR(nums []int) (ans int) {
    for i := 0; i < len(nums); i++ {
        for j := i+1; j < len(nums); j++ {
            ans = max(ans, nums[i]^nums[j])
        }
    }
    return ans
}

func max(a, b int) int {
    if a > b {
        return a
    }
    return b
}

一眼顶真,鉴定为暴力出奇迹,暴力?启动!

暴力启动失败。。。(不应该啊,绝对是 LeetCode 更新了样例,10 的 5 次方的复杂度应该是可以暴力过的)

没关系,我其实还有一个思路,就是他想要最大值,我们可以找二进制最高位是能取到 1 的值,然后次高位,以此类推,就能找到最大的异或值。想的很好,但是我不知道咋写,没办法,偷看大佬题解去了

看了少说半个小时的题解,终于有点眉目了,算法菜鸟落泪了

func findMaximumXOR(nums []int) (ans int) {
    mask := 0
    for i := 30; i >= 0; i-- { // 从最高位开始判断
        mp := map[int]bool{} 
        mask |= 1 << i // 把第 i 位, 置为 1
        checkAns := ans | 1 << i // 将 checkAns的 第 i 位, 置为 1
        for _, v := range nums { // 遍历 nums 数组
            v &= mask // i 位之后全置为 0
            if mp[checkAns^v] { // 如果存在两个数异或等于 checkAns 
                ans = checkAns // checkAns 成真,更新 ans
                break
            }
            mp[v] = true // 将 v 塞进 map
        }
    }
    return ans
}

虽然打了很多注释,但不够清楚,我来整体捋一下这道题的思路:

  1. 从最高位开始判断(这个很好理解,毕竟是求最大)
  2. 理解 checkAns 变量:每次遍历,我们会将 ans 的第 i 位设置成 1,也就是理想中的最大值,接下来的逻辑就是看看 nums 数组中的数进行异或操作能不能得到 i 位为 1 的 checkAns,如果能,就更新 ans,如果不能就继续遍历
  3. 理解 mask 变量:mask 将第 i 位之后的值都置为 0,只关注第 i 位及以前的值(具体来说就是这个操作:v &= mask),当 nums 数组中出现一个 v,能让 v^checkAns = map 中的任意一个 v,就证明数组中的两个值异或能得出 checkAns,所以就能更新 ans 的大小了
  4. 理解为什么使用 map:使用 map 之后,原本是 O(N) 的匹配,就优化成了 O(1) 的匹配效率,这就是为什么时间复杂度下降的原因

最后补充一下位运算的一个小知识:
a ^ b = c
b ^ b = 0
可得:a = c ^ b

带入题目中:
v ^ (map 中的任意一个 v) = checkAns
v ^ v = 0
(map 中的任意一个 v) = v ^ checkAns

结语

我燃尽了。。。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分享去视频/图片水印的工具(完结篇)

简介 视频去水印是在数字时代日益重要和频繁的需求之一。水印是一种保护版权和确认身份的常见手段&#xff0c;但在某些情况下&#xff0c;水印可能会对视频内容产生负面影响&#xff0c;因此需要去除。 首先&#xff0c;视频去水印可以改善视频观看体验。有些视频平台或个人会…

非常有用的工具箱IT-Tools

什么是 IT-Tools &#xff1f; IT-Tools 汇集了 70 多种对开发人员和 IT 工作人员有用的工具。这个令人惊叹的工具的酷炫之处在于它不需要设置&#xff0c;不需要持久卷&#xff0c;您可以立即开始使用它。它包含大量工具&#xff0c;可生成密码、编辑 CSS 和 HTML 代码、文件格…

Blazor组件

Blazor组件 前言&#xff1a;博主文章仅用于学习、研究和交流目的&#xff0c;不足和错误之处在所难免&#xff0c;希望大家能够批评指出&#xff0c;博主核实后马上更改。 组件&#xff1a; Blazor 应用基于 Razor 组件&#xff0c;通常仅称为组件。 组件是 UI 的一个元素&…

自动驾驶算法(五):Informed RRT*算法讲解与代码实现(基于采样的路径规划) 与比较

目录 1 RRT*与Informed RRT* 2 Informed RRT*代码解析 3 完整代码 4 算法比较 1 RRT*与Informed RRT* 上篇博客我们介绍了RRT*算法&#xff1a;我们在找到一个路径以后我们还会反复的搜索。 Informed RRT*算法提出的动机(motivation)是能否增加渐近最优的速度呢&#xff1f;…

【腾讯云HAI域探秘】速通腾讯云HAI

速览HAI 产品简介 腾讯云高性能应用服务(Hyper Application lnventor&#xff0c;HA)&#xff0c;是一款面向 Al、科学计算的 GPU 应用服务产品&#xff0c;为开发者量身打造的澎湃算力平台。无需复杂配置&#xff0c;便可享受即开即用的GPU云服务体验。在 HA] 中&#xff0c;…

3000 台 Apache ActiveMQ 服务器易受 RCE 攻击

超过三千个暴露在互联网上的 Apache ActiveMQ 服务器容易受到最近披露的关键远程代码执行 (RCE) 漏洞的影响。 Apache ActiveMQ 是一个可扩展的开源消息代理&#xff0c;可促进客户端和服务器之间的通信&#xff0c;支持 Java 和各种跨语言客户端以及许多协议&#xff0c;包括…

Sentinel热点参数限流动

什么是热点 限流是统计访问某个资源的所有请求&#xff0c;判断是否超过QPS阈值。而热点参数限流是分别统计参数值相同的请求&#xff0c;判断是否超过QPS阈值。 何为热点&#xff1f;热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据&am…

关于Intel Press出版的《Bedyong BIOS》第2版的观后感

文章目录 此书的背景UEFI运行时DXE基础CPU架构协议PCI协议UEFI驱动的初始化串口DXE驱动示例 《Beyond BIOS》首先介绍一个简单的UEFI应用程序模块&#xff0c;用于展示UEFI应用程序的行为。作者为Waldo。该模块名为“InitializeHelloApplication”&#xff0c;它接受两个参数&a…

云栖大会,到底有些啥?

引言&#xff1a;10月31日至11月2日&#xff0c;2023云栖大会在杭州云栖小镇召开。小枣君去了现场&#xff0c;拍了一些照片&#xff0c;特来给大家做一个图文汇报。 云栖大会的前身&#xff0c;是2009年开始举办的地方网站峰会。2011年&#xff0c;这个峰会演变成阿里云开发者…

Linux的历史与环境

目录 Linux的背景介绍 Linux的时代背景-硅谷模式 计算机发展 UNIX发展历史 Linux诞生的偶然与必然 Linux开源 Linux发行版本 搭建Linux的环境 1.直接安装在物理机上 2.使用虚拟机软件 3.使用云服务器 &#xff08;1&#xff09;购买云服务器 &#xff08;2&#x…

docker是干什么的

很多朋友刚接触docker&#xff0c;不知道docker做什么&#xff0c; 这里白眉大叔给大家普及一下 docker的知识以及docker和虚拟机的区别。 你可以这样认为&#xff0c;docker 就是 打包应用程序的工具。 怎么理解这个工具呢&#xff1f; 1-如何理解docker 这个打包工具&#x…

作为一个初学者,该如何入门大模型?

在生成式 AI 盛行的当下&#xff0c;你是否被这种技术所折服&#xff0c;例如输入一段简简单单的文字&#xff0c;转眼之间&#xff0c;一幅精美的图片&#xff0c;又或者是文笔流畅的文字就展现在你的面前。 相信很多人有这种想法&#xff0c;认为生成式 AI 深不可测&#xf…

选择适合你的办公桌:提高工作效率的关键

​在如今的数字时代&#xff0c;越来越多的人将办公桌移到家里或办公室。但是&#xff0c;如何选择适合你的办公桌可能是个挑战。不同的工作需要和工作空间大小会影响你的选择。下面是一些简单的建议&#xff0c;帮助你找到适合你的办公桌&#xff0c;提高工作效率。 首先&…

世微 平均电流型降压恒流驱动器 电动摩托车LED灯小钢炮驱动IC AP5218

1&#xff0c;来源&#xff1a;深圳市世微半导体有限公司 2&#xff0c;产品描述 AP5218 是一款 PWM工作模式, 高效率、外 围简单、内置功率管&#xff0c;适用于5V&#xff5e;100V输入的高 精度降压 LED 恒流驱动芯片。输出最大功率可达 15W&#xff0c;最大电流 1.5A。AP5…

Leetcode—2512.奖励最顶尖的K名学生【中等】

2023每日刷题&#xff08;十九&#xff09; Leetcode—2512.奖励最顶尖的K名学生 哈希表stringstream排序算法思想 实现代码 class Solution { public:vector<int> topStudents(vector<string>& positive_feedback, vector<string>& negative_feed…

MySQL中如何书写update避免锁表

1. 什么是MySQL锁表&#xff1f; MySQL锁表是指在对某个数据表进行读写操作时&#xff0c;为了保证数据的一致性和完整性&#xff0c;系统会对该数据表进行锁定&#xff0c;防止其他用户对该表进行操作。 2. 为什么会出现锁表&#xff1f; 当多个用户同时对同一个数据表进行…

(附源码)基于springboot校园自媒体信息服务平台-计算机毕设 84565

springboot校园自媒体信息服务平台 目 录 摘要 1 绪论 1.1课题意义 1.2开发现状 1.3系统开发技术的特色 1.4springboot框架介绍 1.5论文结构与章节安排 2 2校园自媒体信息服务平台系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1数据增加流程 2.3.2数据修改流程 2…

一文搞定 Linux 中 Python 环境/版本管理

Python 的环境/版本管理实在是依托答辩&#xff0c;感觉不如 Node.js。 尤其是在 Linux 环境下&#xff0c;多数发行版的系统组件、工具依赖自带的 Python&#xff0c;折腾系统自带的 Python 环境时&#xff0c;一个搞不好就会把整个系统干掉。 同时&#xff0c;研究安全的小伙…

前端使用firebase配置第三方登录介绍(谷歌登录,facebook登录等)

参考文档 点此处去 firebase 官网点此处去 web端的谷歌登录文档 实现 首先注册一个账号登录firebase&#xff08;可以使用谷歌账号登录&#xff09; 然后创建项目&#xff08;走默认配置就行了&#xff09; 添加应用&#xff08;走默认配置&#xff09;&#xff0c;如图所…

SpringBoot-SpringTask定时任务

文章目录 Spring Task 介绍cron 表达式Spring Task 入门案例 Spring Task 介绍 Spring Task 是 Spring 框架提供的任务调度工具&#xff0c;可以按照约定的时间自动执行某个代码逻辑。 作用&#xff1a;定时自动执行某段 Java 代码 应用场景&#xff1a; 信用卡每月还款提醒…