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 は増加し、1, 2, 5, 7 と 1, 2, 4, 7 も同様です。長さは4です。5つの値を選んでも増加し続けるものはありません。
challenge icon

発展問題

最長増加部分列の長さに加えて、その部分列自体も1つ返し、なおかつ O(n log n) 時間で実行できますか?

コードをリセット
def lengthOfLIS(nums):
    # ここにコードを書いてください

テスト #1

テスト #2

テスト #3

引数

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

期待される出力

4