Я пытаюсь решить эту проблему: В целочисленном массиве все числа происходят точно дважды, за исключением единственного числа, которое происходит точно однажды.
Простое решение состоит в том, чтобы отсортировать массив и затем протестировать на не повторение. Но я ищу лучшее решение, которое имеет временную сложность O (n).
Вы можете использовать операцию «XOR» на весь массив. Каждая пара номеров отменит друг друга, оставляя вас с искажем.
int get_orphan(int const * a, int len)
{
int value = 0;
for (int i = 0; i < len; ++i)
value ^= a[i];
// `value` now contains the number that occurred odd number of times.
// Retrieve its index in the array.
for (int i = 0; i < len; ++i)
{
if (a[i] == value)
return i;
}
return -1;
}