trie树-leetcode-421. Maximum XOR of Two Numbers in an Array
来源:互联网 发布:网络程蝶依视频 编辑:程序博客网 时间:2024/06/05 20:32
考察点:trie树,还有一种set方法,思路类似;
思路:首先建立trie字典树,它记录了这些nums中从最高位第32位(脚码是31)开始建立二叉树,只有0,1,建立的时候是对每一个数字,按照从高位到低位的顺序遍历各个位; 然后就是寻找XOR的最大数值了,它是由这颗树root跟nums中的每一个num产生的,对于每一个num,依次将它的每一个位与trie树中的节点比较,若能异或为1,就将ret的该位置为1,否则置为0;
C++代码:
class Solution {public: struct TrieNode { TrieNode *child[2]; TrieNode() { child[0] = NULL; child[1] = NULL; } }; TrieNode *buildTree(vector<int> &nums) { TrieNode *root = new TrieNode(); TrieNode *cur = NULL; int n = nums.size(); for (int i=0; i<n; i++) { cur = root; for (int j = 31; j>=0; j--) { int index = ((nums[i]>>j)&1); if (cur->child[index] == NULL) cur->child[index] = new TrieNode(); cur = cur->child[index]; } } return root; } int help(TrieNode * node, int num) { int ret = 0; for (int i=31; i>=0; i--) { int index = ((num>>i)&1) ? 0 : 1; if (node->child[index]) { ret <<= 1; ret |= 1; node = node->child[index]; } else { ret <<= 1; node = node->child[index ? 0 : 1]; } } return ret; } int findMaximumXOR(vector<int>& nums) { int ret = 0; TrieNode *root = buildTree(nums); for (int i=0; i<nums.size(); i++) { ret = max(ret, help(root, nums[i])); } return ret; }};
阅读全文
0 0
- trie树-leetcode-421. Maximum XOR of Two Numbers in an Array
- [leetcode]421. Maximum XOR of Two Numbers in an Array
- 【LeetCode】 421. Maximum XOR of Two Numbers in an Array
- [leetcode]421. Maximum XOR of Two Numbers in an Array
- Leetcode-421. Maximum XOR of Two Numbers in an Array
- [LeetCode]421. Maximum XOR of Two Numbers in an Array
- leetcode 421. Maximum XOR of Two Numbers in an Array
- (LeetCode) 421. Maximum XOR of Two Numbers in an Array
- leetcode 421. Maximum XOR of Two Numbers in an Array
- LeetCode: 421. Maximum XOR of Two Numbers in an Array
- leetcode 421. Maximum XOR of Two Numbers in an Array
- Trie (3) -- Maximum XOR of Two Numbers in an Array
- 【LeetCode-421】Maximum XOR of Two Numbers in an Array
- LeetCode #421: Maximum XOR of Two Numbers in an Array
- Leetcode Maximum XOR of Two Numbers in an Array
- 【LeetCode】Maximum XOR of Two Numbers in an Array
- 421. Maximum XOR of Two Numbers in an Array详解
- 421. Maximum XOR of Two Numbers in an Array
- 解决nodejs不支持async和await关键字的问题
- CodinGame: Power of Thor 反思
- codeforces 620C Pearls in a Row
- Docker网络管理及容器跨主机通信
- linux下程序的标准输入流输出流错误流
- trie树-leetcode-421. Maximum XOR of Two Numbers in an Array
- Linux 串口编程<三> 使用termios与API进行串口程序开发
- activiti eclipse集成
- android广角相机畸变校正算法和实现
- 安卓TextView文本不满一行由于英文,标点符号等原因换行
- codeforces 622C
- LeetCode之路:455. Assign Cookies
- Struts2_国际化、配置全局资源与输入国际化信息
- 2017年大坑