421. Maximum XOR of Two Numbers in an Array

在这里插入图片描述

class Solution {
public:
    int findMaximumXOR(vector<int>& nums) {
        int max = 0, mask = 0;
        for (int i = 31; i >= 0; --i) {
            mask |= (1 << i);
            unordered_set<int> si;
            for (int num : nums)
                si.insert(mask & num);
            
            int temp = max | (1 << i);
            for (int prefix : si) 
                if (si.find(temp ^ prefix) != si.end()) {
                    max = temp;
                    break;
                }
        }
        return max;
    }
};

贪心,从最高位开始。
每次迭代,max代表最高位上会产生的最大值。temp是当前这一位上可能的最大值。
如果要取到temp,必须要set中两个值A,B,使得A^B=temp.
注意A^B=C->
A=C^B,
所以只要看A*temp在不在set中就行了。

这一题还是没有完全理解。

posted @ 2019-10-25 11:28  于老师的父亲王老爷子  阅读(9)  评论(0编辑  收藏  举报