Я столкнулся с проблемой общего программирования: учитывая список целых чисел без знака, найдите одно целое число, которое встречается нечетным числом раз в списке. Например, если задан список:
{2,3,5,2,5,5,3}
решение будет состоять из целого числа 5, так как оно встречается 3 раза в списке, а другие целые числа - четное число раз.
Мое первоначальное решение включало настройку отсортированного массива, а затем итерацию через массив: для каждого нечетного элемента я бы добавил целое число, в то время как для каждого четного элемента я бы вычитал; конечная сумма была решением, так как другие целые числа будут отменены.
Однако я обнаружил, что более эффективное решение существует, просто выполняя XOR для каждого элемента - вам даже не нужен отсортированный массив! То есть:
2^3^5^2^5^5^3 = 5
Я вспоминаю из класса дискретных структур, я предположил, что ассоциированное свойство применимо к операции XOR и почему это решение работает:
a^a = 0
и
a^a^a = a
Хотя я помню, что ассоциативное свойство работает для XOR, у меня возникли проблемы с поиском логического доказательства этого свойства, специфичного для XOR (большинство логических доказательств в Интернете, похоже, больше сосредоточены на операциях AND и OR). Кто-нибудь знает, почему ассоциативное свойство применяется к операции XOR?
Я подозреваю, что он включает идентификатор XOR, содержащий AND и/или OR.