leetcode421. 数组中两个数的最大异或值(贪心算法)
给你一个整数数组 nums ,返回 nums[i] XOR nums[j] 的最大运算结果,其中 0 ≤ i ≤ j < n 。
进阶:你可以在 O(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的两个数就是能产生最大结果的两个数,例如:
- 0011 0000
- 0000 0000
- 0010 0000
因为0000 0000 和 0011 0000异或,能产生一个高位的1 和 次高位的1,而0000 0000和 0010 0000 异或只能产生一个高位的1,所以优先选择第一种方案。
代码
func findMaximumXOR(nums []int)(res int) {const hb = 30res=0for i := hb; i >=0 ; i-- {
//移除30位,因为都是在正数的范围内,所以第31位就是最高位
//也就是说最外层循环是遍历31种情况
//从移除30位到全部位数都保留的31种情况seen :=map[int]bool{}for _, num := range nums {seen[num>>i]=true}
//移除特定位数以后的值保留在map里面cur:=res*2+1
//将上一步计算出来的结果值左移一位,再加1
//因为上一步的结果是高位的结果,所以需要左移
//为什么要加1?就是假设当前遍历到的位可以出现01异或这种情况,就产生低位的1,因为a^b=c 等价于 a^c=b
//则有a^b=cur 等价于a^cur=b,这就是if seen[(num>>i)^cur]进行的判断//我们将假设的结果与所有的值进行异或运算,如果map中存在这个异或的结果,就说明数组中有两个数字是可以在当前位进行异或得到1的
//如果找到了,就说明我们假设的结果是正确的,否则就是当前位只能是0,所以需要减去1found:=falsefor _, num := range nums {if seen[(num>>i)^cur]{found=truebreak}}if found{res=cur}else{res=cur-1}}return
}
leetcode421. 数组中两个数的最大异或值(贪心算法)相关推荐
- 数组中两个数的最大异或值 两数异或值一定小于两数相加和
链接:数组中两个数的最大异或值 给你一个整数数组 nums ,返回 nums[i] XOR nums[j] 的最大运算结果,其中 0 ≤ i ≤ j < n . 进阶:你可以在 O(n) 的时间 ...
- arrays中copyof复制两个数组_异或的魅力!图解「数组中两个数的最大异或值」
今天分享的题目来源于 LeetCode 第 421 号问题:数组中两个数的最大异或值.在 异或 这个知识点里面属于一个中高难度的题目. 题目描述 给定一个非空数组,数组中元素为 a0, a1, a2, ...
- LeetCode 421. 数组中两个数的最大异或值
421. 数组中两个数的最大异或值 Idea 假设选择了数组中的元素ai和aj使得它们达到最大按位异或结果x:x=ai⊕ajx=a_{i}⊕a_{j}x=ai⊕aj,其中⊕表示按位异或运算. 根据 ...
- 421. 数组中两个数的最大异或值
题目:421. 数组中两个数的最大异或值 题解:https://leetcode-cn.com/problems/maximum-xor-of-two-numbers-in-an-array/solu ...
- Leetcode :421. 数组中两个数的最大异或值 (位运算)
421. 数组中两个数的最大异或值 给定一个非空数组,数组中元素为 a0, a1, a2, - , an-1,其中 0 ≤ ai < 231 . 找到 ai 和aj 最大的异或 (XOR) 运算 ...
- LeetCode 421. 数组中两个数的最大异或值(Trie树)
1. 题目 给定一个非空数组,数组中元素为 a0, a1, a2, - , an-1,其中 0 ≤ ai < 231 . 找到 ai 和aj 最大的异或 (XOR) 运算结果,其中0 ≤ i, ...
- leetcode 421. Maximum XOR of Two Numbers in an Array | 421. 数组中两个数的最大异或值(位运算,Trie前缀树)
题目 https://leetcode.com/problems/maximum-xor-of-two-numbers-in-an-array/ 题解 自己没有思路,看了答案之后自己写的. 参考:Py ...
- leetcode算法题--数组中两个数的最大异或值
原题链接:https://leetcode-cn.com/problems/maximum-xor-of-two-numbers-in-an-array/ 1.方法一:暴力法 func findMax ...
- C语言数组中两个数字之间的最大差的算法(附完整源码)
C语言数组中两个数字之间的最大差的算法 C语言数组中两个数字之间的最大差的算法完整源码(定义,实现,main函数测试) C语言数组中两个数字之间的最大差的算法完整源码(定义,实现,main函数测试) ...
最新文章
- 设计模式之解释器模式、例子分析
- C#通过WMI的wind32 的API函数实现msinfo32的本地和远程计算机的系统摘要信息查看功能...
- 书脊开胶了用什么胶粘_画册印制1万本,结果一本不能用,这些问题你注意了吗...
- 电脑端跳转手机版的php代码,帝国CMS电脑端自动跳转到手机端移动端的方法
- mosek 安装配置python_python安装、配置以及pyinstaller的安装、使用
- Pudb调试python
- 一、初识函数定义与调用
- java形参、实参、值传递、引用传递
- 防御XSS攻击的七条原则
- javascript 编程指南
- 使用 Cobbler 自动化和管理系统安装
- mysql主从同步 忽略库_主从复制中忽略库的参数
- 【小程序-开篇】国内IT技术圈的技能树貌似点歪了?
- 利用pdf.js封装vue组件在vue中实现在线pdf查看
- python中polyfit 之poly1d与polyval的含义
- 比较两组数据的差异用什么图更直观_第四节 单因素完全随机实验设计及数据处理...
- DirectX和OPenGL 与 UE4 U3D的关系是什么?
- 【turtle】画一朵漂亮的玫瑰花,真的很漂亮
- Python 面向对象
- 【MAC M1芯片】PS已解决在M1苹果电脑上出现“闪退”“液化”和WEB等黑屏问题