Menu
CoddyTech

Longest Increasing Subsequence

Дан список целых чисел nums. Подпоследовательность сохраняет некоторые элементы в исходном порядке, а остальные пропускает; сохранённые элементы не обязаны стоять рядом. Верните длину самой длинной подпоследовательности, значения которой строго возрастают слева направо. Два одинаковых значения подряд не считаются возрастающими.

Функция

lengthOfLIS(nums: integer-array) → integer
numsinteger-array
список целых чисел, из которых нужно выбрать
Возвращаетinteger
длина наибольшей строго возрастающей подпоследовательности

Ограничения

  • 1 ≤ nums.length ≤ 2500
  • -104 ≤ nums[i] ≤ 104

Примеры

Ввод
nums = [3, 1, 8, 2, 5, 9, 4, 7]
Вывод
4
Пояснение
Последовательность 1, 2, 5, 9 образует возрастающую подпоследовательность длины 4; то же верно для 1, 2, 5, 7 и 1, 2, 4, 7. Ни один выбор из пяти значений не образует возрастающую последовательность, поэтому ответ — 4.

lock icon+20 скрытых тестов при отправке

challenge icon

Дополнительный вопрос

Можешь вернуть саму одну из самых длинных возрастающих подпоследовательностей, а не только её длину, и при этом по-прежнему выполнить алгоритм за O(n log n)?

Сбросить код
def lengthOfLIS(nums):
    # Напишите код здесь
Тестовые случаи

Случай 1

Случай 2

Случай 3

Ввод

nums = [3, 1, 8, 2, 5, 9, 4, 7]

Ожидается

4