Сделайте это с помощью побитового xor:
int result = 0;
for (int n : nums) {
result ^= n;
}
return result;
Это работает, потому что:
a ^ 0 = a
, a ^ a = 0
a ^ b = b ^ a
(a ^ b) ^ c = a ^ (b ^ c)
, поэтому парные числа взаимно исключают друг друга, где бы они ни находились в массиве.
Обратите внимание, что пока это совсем другой подход к вашему ответу, вы можете применить аналогичный подход к использованию Map
:
Map<Integer, Integer> map = new HashMap<>();
for (int n : nums) {
if (!map.remove(n)) {
map.add(n, n);
}
}
Это добавляет и удаляет пары элементов с карты; в конце на карте должно остаться только 1 непарное значение.
return map.keySet().iterator().next();
(здесь на самом деле нет смысла использовать Map
, вы также можете использовать Set
).