Задать вопрос
m_avrina
@m_avrina
Студентота.

Как найти наибольшую поседовательность за O(n)?

Всем привет!
Дан массив чисел, в нем необходимо найти длину самой длинной последовательности(последовательность может быть только с разнице на 1) за O(n)
Собственно вот пример:
1 2 433 500 3 900 4
Следовательно длинная самая последовательность 4(1 2 3 4)
И вот как это все реализовать за 1 проход
Может какие-то наводки/ссылки/статьи
  • Вопрос задан
  • 630 просмотров
Подписаться 4 Средний 5 комментариев
Пригласить эксперта
Ответы на вопрос 4
demon416nds
@demon416nds
Разработчик на чем попало
банальным проходом с подсчетом длины текущей последовательности
Ответ написан
sergiks
@sergiks Куратор тега Алгоритмы
♬♬
На англ. проблема называется "longest increasing subsequence"

Вот публикация алгоритма решения этой проблемы за n log n−n log log n + O(n)

Upd. По-русски называется Задача о наибольшей возрастающей подпоследовательности (НВП).
Ответ написан
Astrohas
@Astrohas
Python/Django Developer
https://www.youtube.com/watch?v=t2DpD9GnhfU гуровиц объясняет более внятно.
Просто берете стандартный алгоритм, при n-ом итеме проверяете его разницу в значениях и если разница равно 1 то только тогда увеличиваете счетчик.
Ответ написан
tsarevfs
@tsarevfs
C++ developer
Хранить hash map, в которой ключ - значение последнего элемента в последовательности встреченной раньше, а значение -- длина. И дальше проходим по массиву и заполняем.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы