Я видел вопрос о поиске не повторяющегося числа из множества, содержащего только одно число диктата, а остальные числа могут повторяться любое четное число раз. Ограничение заключалось в том, что вам нужно найти это число за один проход, используя постоянную память. {предположим, что все - положительные числа}.
я легко понял это, выполнив эту функцию
private static int nonRepeatingElement(int[] set)
{
int element = 0;
for (int i = 0; i < set.length; i++)
{
element = (element ^ set[i]);
System.out.println(element);
}
return element;
}
и это работает нормально.
Теперь только из-за любопытства я решил изменить проблему с аналогичными ограничениями.
задачи1
Я думал о наборе, который теперь содержит элементы, которые могут возникать в любое нечетное число времени, за исключением одного элемента, который не имеет даже времени. for example
{2,5,7,5,7,1,2,7,1,5,2}
Теперь, сохраняя логику, которую XNOR дает 0 для каждого нечетного появления 1, я немного изменил код
for (int i = 0; i < set.length; i++)
{
element = (element ^ set[i]);
System.out.println(element);
}
return ~element;
но это не сработало.
задачи2
если я возьму элементы в наборе типа {2,5,7,5,7,1,2,7,5,2}, то мышление XNORing будет делать каждое трехкратное появление числа до 0 и XNORing с 1 (единственным вхождением) в 0 будет переворачивать биты 1. Конечный результат может быть достигнут, если я переверну (() биты того, что я получаю от операции XNOR. Но это также не работает.
Я знаю, почему эта семантика идет не так, потому что это побитовая операция не логична. Но если xoring можно использовать для поиска нечетного числа пробелов, не существует ли какой-либо возможности с XNOR для нахождения даже окклюзии числа?
Я не уверен в возможности этой проблемы, которую я прошу только из любопытства, поэтому простите мое невежество, если оно не имеет значения в любом контексте.
XOR
и XNOR
являются коммутативными. Это означает, что любой повторный порядок последовательности всегда дает тот же результат.
Вы уже знаете, что a ^ a
равно нулю. То, как работает одиночная абстракция числа: a ^ b ^ a
равно a ^ a ^ b
которая равна 0 ^ b
которая равна b
.
Но a XNOR a
также не является функцией a
. Это просто целая нагрузка 1 бит. Поэтому вы не можете восстановить значение a
помощью a XNOR a
и поэтому ваш подход не будет работать.
~(element ^ set[i]);
но теперь~
после цикла.