leetcode 421. 数组中两个数的最大异或值

leetcode 421. 数组中两个数的最大异或值_第1张图片
leetcode 421. 数组中两个数的最大异或值_第2张图片

							//然后再对每个数的异或值进行比较;
	class Solution {
public:
    struct Node
    {
      int son[2];
    };
    vectornodes;
    int findMaximumXOR(vector& nums) {
        nodes.push_back({0,0});
        for(auto x:nums)
        {
          int p=0;
          for(int i=30;i>=0;i--)
          {
            int t=x>>i&1;
            if(!nodes[p].son[t])//判断当前儿子存储的下一个节点是否存在
            {
              nodes.push_back({0,0});
              nodes[p].son[t]=nodes.size()-1;  //存储的是下一节点下标
            }
            p= nodes[p].son[t];
            
          }
     
        }
      int res=0;
      for(auto x:nums)
      {
        int p=0,max_xor=0;
        for(int i=30;i>=0;i--)
        {
          
          int t=x>>i&1;
          if(nodes[p].son[!t])//看当前节点的另一个儿子存不存在,存在就添加到答案
          {
            
            p=nodes[p].son[!t];
            max_xor+=1<

你可能感兴趣的:(位运算,leetcode,421.,数组中两个数的最大异或值)