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も同様です。5つの値を選んで増加し続けるものはないため、答えは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