voidinsert(int num){ Node * t = root; for (int i = 30; i >= 0; --i) { if ((num & (1 << i)) == 0) { if (t->lc == nullptr) t->lc = newNode(); t = t->lc; } else { if (t->rc == nullptr) t->rc = newNode(); t = t->rc; } }
}
intask(int num)const{ Node * t = root; int ret = 0; for (int i = 30; i >= 0; --i) { if (num & (1 << i)) { if (t->lc != nullptr) { ret |= (1 << i); t = t->lc; } else t = t->rc; } else { if (t->rc != nullptr) { ret |= (1 << i); t = t->rc; } else t = t->lc; } } return ret; } };
classSolution { public: intfindMaximumXOR(vector<int>& nums){ IntTrie t; int ret = 0; for (int v : nums) { t.insert(v); ret = max(ret, t.ask(v)); } return ret; } };