题目中给定若干个数,然后任意选定两个数使得其异或值最大。
先利用样例中的: 3 10 5 25 2 8 这些数转换为二进制来看的话那么是先找到最高位的1然后与数组中其他的数相与后的数值保存到set中去,然后利用性质: a^b=c则a^c=b,在set中只要有异或值的存在的话就说明是符合条件的 。
class Solution { public: int findMaximumXOR(vector<int>& nums) { int res=0,mask=0; for(int i=31;i>=0;i--){ mask|=(1<<i); set<int> st; for(int a:nums){ st.insert(a&mask); } int temp=res|(1<<i); for(int num:st){ if(st.count(temp^num)){ res=temp; break; } } } return res; } };