给你一个整数数组 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. 数组中两个数的最大异或值(贪心算法)相关推荐

  1. 数组中两个数的最大异或值 两数异或值一定小于两数相加和

    链接:数组中两个数的最大异或值 给你一个整数数组 nums ,返回 nums[i] XOR nums[j] 的最大运算结果,其中 0 ≤ i ≤ j < n . 进阶:你可以在 O(n) 的时间 ...

  2. arrays中copyof复制两个数组_异或的魅力!图解「数组中两个数的最大异或值」

    今天分享的题目来源于 LeetCode 第 421 号问题:数组中两个数的最大异或值.在 异或 这个知识点里面属于一个中高难度的题目. 题目描述 给定一个非空数组,数组中元素为 a0, a1, a2, ...

  3. LeetCode 421. 数组中两个数的最大异或值

    421. 数组中两个数的最大异或值 Idea 假设选择了数组中的元素ai和aj使得它们达到最大按位异或结果x:x=ai⊕ajx=a_{i}⊕a_{j}x=ai​⊕aj​,其中⊕表示按位异或运算. 根据 ...

  4. 421. 数组中两个数的最大异或值

    题目:421. 数组中两个数的最大异或值 题解:https://leetcode-cn.com/problems/maximum-xor-of-two-numbers-in-an-array/solu ...

  5. Leetcode :421. 数组中两个数的最大异或值 (位运算)

    421. 数组中两个数的最大异或值 给定一个非空数组,数组中元素为 a0, a1, a2, - , an-1,其中 0 ≤ ai < 231 . 找到 ai 和aj 最大的异或 (XOR) 运算 ...

  6. LeetCode 421. 数组中两个数的最大异或值(Trie树)

    1. 题目 给定一个非空数组,数组中元素为 a0, a1, a2, - , an-1,其中 0 ≤ ai < 231 . 找到 ai 和aj 最大的异或 (XOR) 运算结果,其中0 ≤ i, ...

  7. 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 ...

  8. leetcode算法题--数组中两个数的最大异或值

    原题链接:https://leetcode-cn.com/problems/maximum-xor-of-two-numbers-in-an-array/ 1.方法一:暴力法 func findMax ...

  9. C语言数组中两个数字之间的最大差的算法(附完整源码)

    C语言数组中两个数字之间的最大差的算法 C语言数组中两个数字之间的最大差的算法完整源码(定义,实现,main函数测试) C语言数组中两个数字之间的最大差的算法完整源码(定义,实现,main函数测试) ...

最新文章

  1. 设计模式之解释器模式、例子分析
  2. C#通过WMI的wind32 的API函数实现msinfo32的本地和远程计算机的系统摘要信息查看功能...
  3. 书脊开胶了用什么胶粘_画册印制1万本,结果一本不能用,这些问题你注意了吗...
  4. 电脑端跳转手机版的php代码,帝国CMS电脑端自动跳转到手机端移动端的方法
  5. mosek 安装配置python_python安装、配置以及pyinstaller的安装、使用
  6. Pudb调试python
  7. 一、初识函数定义与调用
  8. java形参、实参、值传递、引用传递
  9. 防御XSS攻击的七条原则
  10. javascript 编程指南
  11. 使用 Cobbler 自动化和管理系统安装
  12. mysql主从同步 忽略库_主从复制中忽略库的参数
  13. 【小程序-开篇】国内IT技术圈的技能树貌似点歪了?
  14. 利用pdf.js封装vue组件在vue中实现在线pdf查看
  15. python中polyfit 之poly1d与polyval的含义
  16. 比较两组数据的差异用什么图更直观_第四节 单因素完全随机实验设计及数据处理...
  17. DirectX和OPenGL 与 UE4 U3D的关系是什么?
  18. 【turtle】画一朵漂亮的玫瑰花,真的很漂亮
  19. Python 面向对象
  20. 【MAC M1芯片】PS已解决在M1苹果电脑上出现“闪退”“液化”和WEB等黑屏问题

热门文章

  1. 【汇编语言】8086汇编的loop循环与[bx]寻址(王爽第五章5.5节学习笔记)
  2. 文件操作相关的系统函数
  3. Java开发环境!java工程师薪资行情
  4. java开发工作找不到要放弃吗,年薪50W
  5. 算法题+JVM+自定义View,详细的Android学习指南
  6. Linux中强大的输入输出重定向和管道
  7. git 基本命令和操作
  8. 《SQL Server 2008从入门到精通》--20180716
  9. Linux iptables:规则原理和基础
  10. 项目启动及需求分析(靳嘉豪、胡新宇、李晨曦、杨航、李瑶)团队作业