LeetCode 421. 数组中两个数的最大异或值
思路#
方法:字典树 + 贪心#
1. 将数组中的数全部存入字典树中
2. 遍历树中的每一个数在字典树中异或的最大结果,最后再求最大结果里面的最大值返回
代码实现#
1 class Solution { 2 class Trie { 3 public: 4 Trie* next[2] = {NULL}; 5 6 //在字典树中插入数字num的二进制 7 void insert(int num) { 8 Trie* t = this; 9 //因为元素小于2^31, 所以右移移30位即可到达最高位 10 for(int i = 30; i >= 0; --i) { 11 //取出num的每一位二进制 12 int b = (num >> i) & 1; 13 if(t->next[b] == NULL) 14 t->next[b] = new Trie(); 15 t = t->next[b]; 16 } 17 } 18 }; 19 public: 20 int findMaximumXOR(vector<int>& nums) { 21 Trie* root = new Trie(); 22 for(int num: nums) 23 root->insert(num); 24 25 int res = 0; 26 for(int num: nums) { 27 Trie* t = root; 28 int sum = 0; 29 for(int i = 30; i >= 0; --i) { 30 int b = (num >> i) & 1; 31 //如果b==1则贪心的去找0异或,否则找1异或 32 if(b == 1) { 33 if(t->next[0] != NULL) { 34 sum += 1 << i; 35 t = t->next[0]; 36 } else { 37 //sum += 0; 38 t = t->next[1]; 39 } 40 } else { 41 if(t->next[1] != NULL) { 42 sum += 1 << i; 43 t = t->next[1]; 44 } else { 45 //sum += 0; 46 t = t->next[0]; 47 } 48 } 49 } 50 //更新最大值 51 if(sum > res) 52 res = sum; 53 } 54 return res; 55 } 56 };
复杂度分析#
参考#
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2018-10-19 堆栈操作合法性