Учитывая целочисленный массив A из N целых чисел, найдите в массиве пару целых чисел, которые имеют минимальное значение XOR. Вот решение грубой силы, где мы находим каждую возможную пару, вычисляем XOR и находим минимум каждой пары:
int minXOR(int arr[], int n)
{
int min_xor = INT_MAX; // Initialize result
// Generate all pair of given array
for (int i = 0; i < n; i++)
for (int j = i + 1; j < n; j++)
// update minimum xor value if required
min_xor = min(min_xor, arr[i] ^ arr[j]);
return min_xor;
}
Вот код со сложностью O (n * logn):
int Solution::findMinXor(vector<int> &A) {
sort(A.begin(),A.end());
int min=INT_MAX;
int val;
for(int i=0;i<A.size();i++)
{
val=A[i]^A[i+1];
if(val<min)
min=val;
}
return min;
}
Я сомневаюсь, как сортировка помогает найти минимальные пары xor? В этом решении мы находим xor только последовательно отсортированных элементов. Не будем ли мы упустить другие потенциальные пары минимальных значений xor, которые не являются последовательными? Я все еще учусь немного манипулировать, так что прости меня, если это сомнение кажется слишком глупым.