Вопрос, возможно, немного вводит в заблуждение, но я не знал, как спросить об этом.
В Hackerrank есть проблема, которая заключается в следующем: < /p>
Рассмотрим массив целых чисел, где все, кроме одного из целых чисел.
встречается парами. Другими словами, каждый элемент в ровно в два раза
, за исключением одного уникального элемента. [2,3,1,3,2] -> Результат -1 < /p>
< /blockquote>
Я решил проблему, как:
private static int lonelyInteger(int[] a) {
if(a==null)
return 0;
if(a.length
Как бы то ни было, что существует аккуратное решение этой проблемы: < /p>
private static int lonelyInteger(int[] a) {
int b = a[0];
for(int i = 1; i < a.length; i++){
b ^= a;
}
return b;
}
< /code>
Проблема в том, что я не знаю, почему это работает?!
Я понимаю, как это работает, но не понимаю, почему это работает?
, чтобы понять, что я сделал небольшую программу для вывода результатов каждого шага: < /p>
public class BitwiseOperator {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] a = new int[n];
int sum = 0;
in.nextLine();
String line = in.nextLine();
String[] numbers = line.split(" ");
for (int i = 0; i < numbers.length; i++) {
a = Integer.valueOf(numbers);
}
for (int i = 0; i < a.length; i++) {
binary(sum, a);
sum ^= a;
binary(sum);
System.out.println();
System.out.println();
System.out.println();
}
System.out.println(sum);
}
private static void binary(int sum) {
System.out.println(String.format("%16s", Integer.toBinaryString(sum)).replace(' ', '0') + " ->" + sum);
}
private static void binary(int sum, int i) {
System.out.println(String.format("%16s", Integer.toBinaryString(sum)).replace(' ', '0') + " ->" + sum);
System.out.println("XOR");
System.out.println(String.format("%16s", Integer.toBinaryString(i)).replace(' ', '0') + " ->" + i);
System.out.println("--------");
}
}
< /code>
Если вы введете следующий ввод: < /p>
5 < /p>
2 3 2 1 3 < /p>
Выход: < /p>
0000000000000000 ->0
XOR
0000000000000010 ->2
--------
0000000000000010 ->2
0000000000000010 ->2
XOR
0000000000000011 ->3
--------
0000000000000001 ->1
0000000000000001 ->1
XOR
0000000000000010 ->2
--------
0000000000000011 ->3
0000000000000011 ->3
XOR
0000000000000001 ->1
--------
0000000000000010 ->2
0000000000000010 ->2
XOR
0000000000000011 ->3
--------
0000000000000001 ->1
1
< /code>
Так что программа на самом деле работает, но мне действительно нужно понять, почему?
Подробнее здесь: https://stackoverflow.com/questions/436 ... -behind-it