Как найти повторяющийся элемент в неупорядоченном массиве, используя константное пространство

Я просматриваю экзаменационные вопросы и наткнулся на этот, который не могу решить (10.а).

Поскольку я не могу изменить массив, я знаю, что не могу использовать сортировку пузырьком, например, но бит, который меня бросает, - это "не зависит от п", единственная идея, которую я могу придумать, - это выбрать элемент array[i] и сравнить его с array[i+j] который Я понимаю, что это запрещено, так как это зависит от n.

Мы несколько человек в нашем курсе ломаем головы над тем, как нам подойти к этому, кто-нибудь может дать нам представление о том, как его решить?

Для второй части у нас все в порядке, поскольку мы сделали несколько алгоритмов поиска, которые могли бы решить вопрос.

Как найти повторяющийся элемент в неупорядоченном массиве, используя константное пространство

"элемент массива [i] и сравнить его с массивом [i+n]" - если вы имеете в виду массив [i+j], то да, это ответ, и он разрешен, потому что пространство не зависит от n*. Как вы думаете, почему это будет зависеть от n?

Bernhard Barker 26.05.2019 17:03

При сравнении элементов входного массива не требуется дополнительное пространство.

n. 1.8e9-where's-my-share m. 26.05.2019 17:08

Для 10a вы должны использовать очевидный алгоритм O (n ^ 2), т. Е. Проверять каждую пару. Для 10b вы должны сначала сортировать, а затем искать соседние дубликаты или использовать хеш-таблицу или другую структуру индексации.

Matt Timmermans 26.05.2019 17:26

Да, извините, я имел в виду массив [i+j], тогда я сбиваюсь с толку относительно того, что означает «постоянное количество дополнительного пространства, не зависящее от n», поскольку я думал, что он имел в виду, что нам в основном не разрешено выполнять линейный поиск

Sergi 26.05.2019 20:51
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
4
48
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

may use only a constant amount of additional space

Это означает, что вашему алгоритму разрешено использовать только фиксированное количество ячеек памяти. Однако это не означает, что вам запрещен доступ к памяти, содержащей входной массив.

Обратите внимание, что вопрос касается константы пространство, а не константы время.

Решение, которое сравнивает каждый array[i] с array[i+j], вполне приемлемо, поскольку для него требуется только 1 дополнительная ячейка памяти (для хранения результата).

То есть в основном нет рекурсии или вызовов стека?

Sergi 26.05.2019 21:27

@Sergi: Рекурсия все еще может быть в порядке, если ее потребление стека не зависит от размера массива n. Это случай хвостовой рекурсии (которую можно эффективно переписать в цикл).

blubb 27.05.2019 08:16

Другие вопросы по теме