leetcode 困难题 1707. Maximum XOR With an Element From Array

📅 2026/8/12 17:22:55
leetcode 困难题 1707. Maximum XOR With an Element From Array
Problem: 1707. 与数组中元素的最大异或值字典树nums升序排列的query加入索引以后按照queries[i][1]升序排列的对每个查询query将当前所有nums[i] Query[j][1]的全部加入到字典树中bitset32是小端序也就是低位在低索引高位在高索引所以需要逆序遍历的最高位最好是1越高越应该是1计算结果时若不同的数字存在指针则1否则0Codeclass Trie { public: Trie* arr[2]; Trie() { arr[0] nullptr; arr[1] nullptr; } }; class Solution { public: static bool comp(vectorint a, vectorint c) { return a[1] c[1]; } vectorint maximizeXor(vectorint nums, vectorvectorint queries) { int n, m queries.size(); unordered_setint number; for(int i: nums) number.insert(i); nums.clear(); for(const int i : number) nums.push_back(i); n nums.size(); sort(nums.begin(), nums.end()); vectorvectorint Query; for(int i 0; i m; i) { Query.push_back({queries[i][0], queries[i][1], i}); } sort(Query.begin(), Query.end(), comp); vectorint ret(m, -1); int i 0, ind, rek; Trie* root new Trie(), *ptr, mx; int l 0; while(nums[0] Query[l][1]) { ret[Query[l][2]] -1; l; } for(int j l; j m; j) { while(i n nums[i] Query[j][1]) { bitset32 bs(nums[i]); ptr root; for(int i 31; i 0; i--) { ind bs[i]; if(ptr-arr[ind]nullptr) { ptr-arr[ind] new Trie(); } ptr ptr-arr[ind]; } i; } bitset32 bs(Query[j][0]); ptr root; for(int i 31; i 0; i--) { ind bs[i]; rek 1 - ind; if(ptr-arr[rek]!nullptr) { bs[i] 1; ptr ptr-arr[rek]; } else { bs[i] 0; ptr ptr-arr[ind]; } } ret[Query[j][2]] bs.to_ulong(); } return ret; } };