Menu
CoddyTech

Longest Increasing Subsequence

Otrzymujesz listę liczb całkowitych nums. Podciąg zachowuje niektóre elementy w ich pierwotnej kolejności, a pozostałe pomija; zachowane elementy nie muszą znajdować się obok siebie. Zwróć długość najdłuższego podciągu, którego wartości ściśle rosną od lewej do prawej. Dwie równe wartości występujące kolejno nie oznaczają wzrostu.

Funkcja

lengthOfLIS(nums: integer-array) → integer
numsinteger-array
lista liczb całkowitych do wyboru
Zwracainteger
długość najdłuższego ściśle rosnącego podciągu

Ograniczenia

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

Przykłady

Wejście
nums = [3, 1, 8, 2, 5, 9, 4, 7]
Wyjście
4
Wyjaśnienie
1, 2, 5, 9 rośnie, podobnie jak 1, 2, 5, 7 oraz 1, 2, 4, 7: długość 4. Żaden wybór pięciu wartości nie zachowuje rosnącej kolejności.
challenge icon

Pytanie dodatkowe

Czy możesz zwrócić jedną najdłuższą rosnącą podsekwencję wraz z jej długością i nadal działać w czasie O(n log n)?

Zresetuj kod
def lengthOfLIS(nums):
    # Wpisz tutaj kod

Test #1

Test #2

Test #3

Argument

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

Oczekiwany wynik

4