Этот вопрос существует только из-за чистого любопытства. Не домашнее задание.Самый быстрый способ найти 2 недостающих числа в массиве
Найти самый быстрый способ найти два недостающее число в массиве 1..n
Так, в родственном сообщение: Quickest way to find missing number in an array of numbers я узнал, что вы можете сделать это довольно быстро путем суммирования и вычитания суммы.
, но как насчет 2 чисел?
Таким образом, наши варианты:
- Последовательный поиск
- Суммируя элементы, вычитая из общей для всех элементов из 1..N, а затем искать все возможные случаи.
Что-нибудь еще? Возможно ли иметь решение O (n)? Я нашел это в рубиновом разделе одного из сайтов, но считается, что на каком-либо языке (если нет каких-либо конкретных вещей для языка)
Вы можете просто отсортировать массив, который можно выполнить в O (n log n). После этого вы можете перебирать отсортированные данные и обнаруживать, что число i не должно быть n + 1. Это добавит еще один n, но все равно будет в O (n log n). –
-1. Ваш вопрос непонятен. Что вы имеете в виду, что числа отсутствуют в массиве 1..n (возможно, вы имели в виду '(1..n) .to_a')? Разве это не все? Если в ссылке есть некоторые детали, это все равно не помогает. Здесь нужно четко сформулировать вопрос. – sawa
«Самый быстрый» плохо определен. Самый быстрый алгоритм и, вероятно, самая быстрая реализация Ruby, дубликат: http://stackoverflow.com/questions/3492302/easy-interview-question-got-harder-given-numbers-1-100-find-the-missing-numbe. Лучший игрок в Ruby: возможно, ответ steenslag. –