博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【leetcode】421. Maximum XOR of Two Numbers in an Array
阅读量:6335 次
发布时间:2019-06-22

本文共 1181 字,大约阅读时间需要 3 分钟。

题目如下:

解题思路:本题的难点在于O(n)的复杂度。为了减少比较的次数,我们可以采用字典树保存输入数组中所有元素的二进制的字符串。接下来就是找出每个元素的异或的最大值,把需要找最大值的元素转成二进制表达后逐位在字典树中查找,查找的时候优先匹配反码,反码不存在则用原码。

代码如下:

class Solution(object):    def findMaximumXOR(self, nums):        """        :type nums: List[int]        :rtype: int        """        MAX_LEN = 31        root = {}        for i in nums:            node = root            i = '0'*(MAX_LEN-len(bin(i)[2:])) + bin(i)[2:]            for b in i:                if b not in node:                    node[b] = {}                node = node[b]        #print root['0']['0']['0']['1']['1']        res = 0        for i in nums:            path = ''            i = '0' * (MAX_LEN - len(bin(i)[2:])) + bin(i)[2:]            node = root            for b in i:                if len(node) == 0:                    break                ib = '1' if b == '0' else '0'                if ib in node:                    node = node[ib]                    path += ib                else:                    node = node[b]                    path += b            #print i,path,int(i,2),int(path,2)            res = max(res,int(i,2)^int(path,2))        return res

 

转载于:https://www.cnblogs.com/seyjs/p/9713475.html

你可能感兴趣的文章
C#:10进制转2进制函数
查看>>
EBS R12中中间层(Middle Tier)及应用层脚本(单独开启各服务脚本)-DB层
查看>>
基于OEA框架的客户化设计(二) 元数据设计
查看>>
Java程序性能优化9
查看>>
把系统CALLBACK函数封装到C++类里
查看>>
输入控件tagsinput
查看>>
React Native填坑之旅--布局篇
查看>>
Tomcat5配置mysql4数据源
查看>>
RecyclerView 配合 DiffUtil,好用到飞起
查看>>
hdfs du命令是算的一份数据
查看>>
ASP.NET 进阶】根据IP地址进行百度地图定位
查看>>
SSRS配置1:凭证和邮件
查看>>
HyperLinkField
查看>>
ReentrantLock和synchronized两种锁定机制
查看>>
真正的上锁前,为何要调用preempt_disable()来关闭抢占的case【转】
查看>>
Creating and Using a Dynamic Link Library
查看>>
Qt 一步一步实现dll调用(附源码)
查看>>
mmap DMA【转】
查看>>
屏蔽重复提交表单
查看>>
ASP.net中Security.FormsAuthentication验证用户的状态(匿名|已登录)
查看>>