Вопрос о Единый номер II от leetcode является:Одноместный номер II от leetcode
Дан массив целых чисел, каждый элемент появляется три раза, за исключением одного. Найдите этот единственный. Примечание: Ваш алгоритм должен иметь сложность линейного выполнения. Не могли бы вы реализовать его без использования дополнительной памяти?
На самом деле, я уже нашел решение с веб-сайта, решение:
public int singleNumber(int[] A) {
int one = 0, two = 0;
for (int i = 0; i < A.length; i++) {
int one_ = (one^A[i]) & ~two;
int two_ = A[i] & one | ~A[i] & two;
one = one_;
two = two_;
}
return one;
}
Однако, я не знаю, почему этот код может работать и на самом деле я не знаю способ мышления этой проблемы когда я впервые увидел его? Любая помощь. спасибо!
'one' содержит биты, которые появляются 3k + 1 раз в массиве A,' two' содержит биты, которые появляются 3k + 2 раза в массиве A. –