题目描述:

方法一:

class Solution:
def findMaximumXOR(self, nums: List[int]) -> int:
root = TreeNode(-1) for num in nums:
cur_node = root #当前的node for i in range(0, 32): #代表32个位
# print num, 1 <<(31 - i), num & (1 <<(31 - i))
if num & (1 <<(31 - i)) == 0: #如果当前位与运算的结果是1, 就往左走
if not cur_node.left:
cur_node.left = TreeNode(0)
cur_node = cur_node.left
else: #如果当前位与运算的结果是0, 就往右走
if not cur_node.right:
cur_node.right = TreeNode(1)
cur_node = cur_node.right
cur_node.left = TreeNode(num) #在最后的左叶子节点记录一下这个数的值 res = 0
for num in nums:
cur_node = root for i in range(0, 32):
# print cur_node.val, cur_node.left, cur_node.right
if num & (1 <<(31 - i)) == 0: #与运算结果为0,如果能往右走,就往右走,因为右子树代表1,这样在这一位上异或会得到1
if cur_node.right: #能往右走
cur_node = cur_node.right#就往右走
else: #不能往右走
cur_node = cur_node.left#就往左走
else: #与运算结果为1,如果能往左走,就往左走,因为左子树代表0,这样异或会得到1
if cur_node.left: #能往左走
cur_node = cur_node.left#就往左走
else: #不能往左走
cur_node = cur_node.right#就往右走
temp = cur_node.left.val #得到这条路径存放的数的值 res = max(res, num ^ temp) #每次刷新res为最大值 return res

leetcode-421-数组中两个数的最大异或值*(前缀树)的更多相关文章

  1. LeetCode 421. 数组中两个数的最大异或值(Maximum XOR of Two Numbers in an Array) 71

    421. 数组中两个数的最大异或值 421. Maximum XOR of Two Numbers in an Array 题目描述 给定一个非空数组,数组中元素为 a0, a1, a2, - , a ...

  2. Java实现 LeetCode 421 数组中两个数的最大异或值

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

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

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

  4. 421 Maximum XOR of Two Numbers in an Array 数组中两个数的最大异或值

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

  5. [Swift]LeetCode421. 数组中两个数的最大异或值 | Maximum XOR of Two Numbers in an Array

    Given a non-empty array of numbers, a0, a1, a2, … , an-1, where 0 ≤ ai < 231. Find the maximum re ...

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

    题目链接:https://leetcode-cn.com/problems/maximum-xor-of-two-numbers-in-an-array/ 题目大意: 略. 分析: 字典树 + 贪心. ...

  7. 2016网易实习生编程题:数组中两个数的和等于sum

    题目 找出数组中两个数的和等于sum的这两个数 解题 这个题目做过很多次了,利用HashMap,key为 sum-A[i] value为 i 当 加入HashMap时候A[i] 已经存在map中,ge ...

  8. 在O(N)时间内求解 正数数组中 两个数相加的 最大值

    一,问题描述 给定一个正数数组arr(即数组元素全是正数),找出该数组中,两个元素相加的最大值,其中被加数的下标大于加数的下标.由加法运算的可逆性,j >i 这个条件可以去掉. 即求出: max ...

  9. [LeetCode]1464. 数组中两元素的最大乘积

    给你一个整数数组 nums,请你选择数组的两个不同下标 i 和 j,使 (nums[i]-1)*(nums[j]-1) 取得最大值. 请你计算并返回该式的最大值. 示例 1: 输入:nums = [3 ...

随机推荐

  1. 【HDUOJ】4280 Island Transport

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4280 题意:有n个岛屿,m条无向路,每个路给出最大允许的客流量,求从最西的那个岛屿最多能运用多少乘客到 ...

  2. canvas 画一条折线

    设置画布对象 canvas id="myCanvas" ref="canvas" //获取Canvas对象(画布) var canvas = document. ...

  3. nashorn中js数组转为对象的问题

    背景 在项目中,使用jdk中的nashorn执行javascript脚本,例如如下脚本片段: let ctx = session.ctx; ctx.confirm = { //车牌划分后的数组 seg ...

  4. 随笔-ansible-5

    1.Includes的使用场景 A项目要用重启PHP B项目要用重启PHP C项目要用重启PHP 可以将重启PHP这个task独立成一个playbook文件,供他人引用即可. 首先编写重启PHP的文件 ...

  5. transport error 202: bind failed: Address already in use

    background: I have terminated some test debugger without properly saying goodbye. the JDWP didn't cl ...

  6. Spring入门(二)

    Spring IOC&DI 控制反转(inversion of control):控制什么?什么反转? 我们都知道,传统的程序中,如果A类需要使用B类对象,会在程序中直接创建B类对象实例,此时 ...

  7. CSIC_716_20191204【网络编程 OSI 七层结构】

     软件开发架构 C/S架构: Client: 客户端 Server: 服务端 比如: 微信客户端.QQ客户端等... 优点: - 软件的使用稳定 - 节省网络资源 缺点: - 安装麻烦,用户体验差 - ...

  8. Spring Boot 2.X 实现文件上传(三)

    使用 SpringBoot 项目完成单个.多个文件的上传处理,并将上传的文件保存到指定目录下. 代码演示案例 所有的 HTML 页面文件 index.html <!DOCTYPE html> ...

  9. Android SDK 环境变量配置

    ANDROID_HOME = D:\Package\android-sdk-windows 在path 中加入 %ANDROID_HOME%\tools 和 %ANDROID_HOME%\platfo ...

  10. 牛客多校第七场 C Governing sand 线段树

    题意: 有一个树林,树林中不同种类的树有不同的数量,高度,砍伐它们的价格.现在要求砍掉一些树,使得高度最高的树占剩下的树的总数的一半以上,求最小花费. 题解: 用线段树维护不同种类树的信息,叶子节点从 ...