136. Single Number
Решение задачи 136 “Single Number” с LeetCode.
Условие задачи
Дан непустой массив целых чисел. Все числа повторяются два раза, кроме одного числа. Необходимо найти это числ
Замечание: Алгоритм должен быть линейной сложности ( O(1) ). Возможно ли это сделать без дополнительной памяти?
пример
|
|
|
|
Решение
Отсортировать массив =)
Идея алгоритма:
Отсортировать массив входной массив. А затем пойти по массиву через одно число. И на каждом этапе сравнивать текущий со следующим. Если они не равны - то текущий является искомым уникальным числом.
|
|
Подсчет элементов
Идея алгоритма:
Завести коллекцию число
<->кол-во вхождений
.Пройтись по исходному массиву, записывая встреченные числа в коллекцию ( инкрементировать кол-во встреченных раз) .
Пройтись по коллекции в поисках элемента, который встретился лишь единожды.
|
|
XOR
Идея алгоритма:
Известно, что оперция xor
двух одинаковых чисел равно нулю. Посколько в нашем массиве все числа (кроме одного) встречаются ровно 2 раза – можно проксорить весь массив – получии искомое число.
|
|