Пожалуйста, внимательно прочитайте этот вопрос, прежде чем закрывать его как дубликат, хотя, если это честный дубликат, я буду рад узнать об этом. Это обобщение Найти любое из нескольких возможных повторяющихся целых чисел в списке.
Для любого набора S Nцелые числа и любой массив Aдлина N + 1, каждая запись которой взято из S, что лучше алгоритм для поиска некоторых (должно быть по крайней мере один) повторный ввод A?
ПРИМЕЧАНИЕ. В A может быть несколько повторяющихся записей, и любая запись может повторяться несколько раз.
Как указывает Немо, тривиальное решение занимает пространство O (1) и O (N ^ 2). Я ищу решение, которое улучшает время без ущерба для пространства. Если быть точным, то решение (ы), которое я ищу:
- Возвращает значение a, которое появляется в A не менее двух раз,
- Используется не более O (log N) без изменения A и
- Принимает меньше O (N ^ 2) время
EDIT: набор S предназначен для обеспечения того, чтобы массив A имел хотя бы одну повторяющуюся запись. Для этой проблемы не предполагайте, что у вас есть S, предоставленный вам как упорядоченный набор. Вы можете запросить S (boolean для возврата true
s в S и false
в противном случае), и вы можете запросить A (вызов A [i]), но все. Любое решение, которое сортирует A или S, превышает пределы пробела.
Это обобщение делает недействительным решение указателя к исходному вопросу (у которого есть O (1) и O (N)), и ограничение пространства, которое я налагаю, делает недействительным решение fiver (которое имеет O (N) пространство и время),