Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include <bits/stdc++.h>using namespace std;class Solution {public:long long int solve(vector<int> &nums) {long long int maxm = 0;int mask = 0;for(int i = 20; i >= 0; -- i) {mask |= (1 << i);map<int, int> prefix;for(auto n : nums) {++ prefix[n & mask];}if(prefix.size() == 1) { // all matchcontinue;}auto smallit = prefix.begin();auto largeit = prefix.rbegin();if(largeit->second > 1) {vector<int> tmp;for(auto n : nums) {if((n & mask) == largeit->first) {tmp.push_back(n);}}swap(nums, tmp);continue;}else {auto it = find_if(begin(nums), end(nums), [=](const int n) { return (n & mask) == largeit->first; });