Топ контрибуторов
loading
loading
Знаете ли Вы, что

Вы можете подписаться на RSS ленту новых тестов сервиса Quizful, в том числе и отдельно по каждой категории

Лента обновлений
ссылка Jan 17 21:22
Комментарий от vmermolenko:
огонь
ссылка Jan 16 21:34
Комментарий от temkasiiiii:
спасибо за дилдо техники
ссылка Jan 16 20:37
Комментарий от arhur852:
Теряется вся суть так как SomeMethod() всегда будет воз...
ссылка Jan 16 17:14
Комментарий от bazar:
Не правильные варианты ответов, добавьте еще посредника.
ссылка Jan 15 19:19
Комментарий от temkasiiiii:
да-да,эти тесты проходят и в 2022)
Статистика

Тестов: 153, вопросов: 8596. Пройдено: 493090 / 2403174.

Задачи / Поиск уникального значения

Автор: k06a  к списку      

Вопрос
Имеется массив натуральных чисел. Каждое из чисел присутствует в массиве ровно два раза и только одно из чисел не имеет пары. Необходимо предложить алгоритм, чтобы за минимальное число проходов по массиву определял число не имеющее пары.

Необходимо также предложить алгоритм, если уникальных числа два.
Ответ
Первая задача решается за один проход по массиву.
Необходимо подсчитать XOR-сумму всех чисел массива.
Таким образом пары чисел "уничтожат" друг друга (A xor A = 0).

Для решения второй задачи необходимо разбить диапазон возможных значений чисел на несколько одинаковых по размеру поддиапазонов, например строго пополам. За один проход по массиву нужно вычислять XOR-суммы в поддиапазонах по-отдельности. Далее необходимо делить на поддиапазоны, объединение тех диапазонов, где XOR-сумма получилась не ноль. Как только при подсчёте XOR-сумм найдутся 2 диапазона с ненулевой XOR-суммой, это и будут искомые значение.

Например, для однобайтовых чисел и двух поддиапазонов: после первого прохода будут посчитанны XOR-суммы чисел диапазонов 0-127 и 128-255. Таким образом, если числа были в разных диапазонах, то обе XOR-суммы окажутся ненулевыми.

Для увеличения скорости поиска нужно использовать большее число поддиапазонов. Число проходов равно O(logA(B)), где A - число поддиапазонов (ячеек памяти для хранения XOR-сумм), а B - разрядность чисел в массиве.

Если Вам понравился вопрос, проголосуйте за него

Голосов: 20  loading...
k06a   vasyura   lamed33   art   xornotxor   kaktus312   doubt   SirSlava   SkyFreeLancer   lazik234   krazh   zZoMROT   Engineer9   KvanGee   Deadly   azarov   atomix   worm2   Ingaf   Ibanez