Вам предоставляется массив, содержащий положительные целые числа. Все целые числа встречаются ровно за раз, кроме одного. Найдите это специальное целое число.Как работает этот код?
Решение:
Целое число с нечетным числом случаев будет иметь 0 или более пар и один единственный номер. Итак, если бы мы могли каким-то образом избавиться от всех пар, то все, что у нас осталось, - это единственное число. Теперь, что избавляет от пар? Подсказка: подумайте об операторе.
XOR сделает трюк. Это дает вам решение O (n) без дополнительной памяти.
int GetSpecialOne(int[] array, int length)
{
int specialOne = array[0];
for(int i=1; i < length; i++)
{
specialOne ^= array[i];
}
return specialOne;
}
В чем вопрос? Все, что вам нужно знать, это: 'x^x == 0' - остальное должно быть само собой разумеющимся. –
@Paul: вам также нужно знать, что XOR ассоциативна ... –
Многие дубликаты на SO уже, например. [Поиск единственного числа в списке] (http://stackoverflow.com/questions/35185/finding-a-single-number-in-a-list) и [Алгоритм поиска нечетного элемента (без пар) в массив] (http://stackoverflow.com/questions/4883630/algorithm-to-find-odd-item-with-no-pairs-in-an-array) –