字典树的应用:求数组中异或最大的两个数

求数组中异或最大的两个数,题目参考

LeetCode:https://leetcode.com/problems/maximum-xor-of-two-numbers-in-an-array/description/

hdoj :http://acm.hdu.edu.cn/showproblem.php?pid=4825


最暴力也最容易想到的是遍历数组中每一个数,计算与其他数的异或,并记录最大值,时间复杂度为O(n^2),oj上提交一定会超时,最多的解法是利用字典树,将数组中每个数字的二进制保存在树中,由于异或的规则是相同为0不同为1,要获得最大的异或值,则希望异或的结果又尽可能多的1,所以对数字进行取反后在字典树中寻找,记录每次寻找到最大的异或值,对于int数据,只要构建深度为32的字典树,搜索效率为O(32),每个数字搜索一遍,则算法的时间复杂度为O(32*n),用空间换时间,LeetCode题目代码如下:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值