class Solution {
public:
int findMaximumXOR(vector<int>& nums) {
int n = nums.size(), i, j, temp, m = 0, max = 0;
for(i = 31; i >= 0; --i)
{
m = m | (1 << i);
unordered_set<int> s;
for(j = 0; j < n; ++j)
s.insert(m & nums[j]);
temp = max | (1 << i);
for(auto it = s.begin(); it != s.end(); ++it)
{
if(s.find(*it ^ temp) != s.end())
{
max = temp;
break;
}
}
}
return max;
}
};