博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CSU_1216【异或最大值】
阅读量:5334 次
发布时间:2019-06-15

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

转自:

题目简述:
经典题目,求一个数组中两个数异或运算的最大值。题目极其简单,但是要求的复杂度需要达到O(N * log(N)),还是比较难的。

解题思路:

总的思路就是构建一棵0-1字典树,然后一个数让查找一个与其异或结果最大的数的效率达到O(log(N)),这里因为异或的特殊性质,可以使用贪心法则来实现。
1、0-1字典树:
这里其实是就是二叉树,之所以叫做字典树是因为我们的算法把一个数当成了一个31位的字符串来看,比如1就是三十个零外加一个一,这一部分还是比较简单的。
2、贪心找最大异或值:
异或运算有一个性质,就是对应位不一样为1,我们要让结果最大化,就要让越高的位置为1。我们找跟一个数的异或结果最大的数,就从树的根结点(最高位)开始找,如果对应位置这个数是0,优先去找那一位为1的数,找不到才去找0;如果对应位置这个数是1,优先去找那一位为0的数,找不到才去找0;最终找到的数就是跟这个数异或结果最大的数。n个数,每个数找一个这样的数并算出结果求其中的最大值,可以得到答案。

转载于:https://www.cnblogs.com/keyboarder-zsq/p/5934828.html

你可能感兴趣的文章
1305: [CQOI2009]dance跳舞 - BZOJ
查看>>
关于TDD的思考
查看>>
Cocos2d-x学习之windows 7 android环境搭建
查看>>
将html代码中的大写标签转换成小写标签
查看>>
jmeter多线程组间的参数传递
查看>>
零散笔记
查看>>
第1章2节《MonkeyRunner源码剖析》概述:边界(原创)
查看>>
ubuntu16下面 redis 无法链接到客户端问题
查看>>
android下实现4分屏播放4路高清h264格式的rtsp流
查看>>
[计算机网络] vsftpd的安装与使用
查看>>
【源代码】LinkedList源代码分析
查看>>
Cocostudio学习笔记(4) LoadingBar+ TextField
查看>>
cxf和jboss eap 6.2版本号冲突
查看>>
ORACLE触发器具体解释
查看>>
IOS开发之SVN的使用
查看>>
Python学习之元组
查看>>
第三次作业
查看>>
quartz多任务调度+spring 实现
查看>>
Codeforces 97.B Superset
查看>>
noip2008 笨小猴
查看>>