アルゴリズム_最長上昇サブシーケンス(js)
4568 ワード
力ボタン300.最長上昇サブシーケンスは、無秩序な整数配列を与え、最長上昇サブシーケンスの長さを見つけます.
例1
入力:[10,9,2,5,3,7101,18]出力:4解釈:最も長い上昇サブシーケンスは[2,3,7101]であり、その長さは4である.
説明:最長上昇サブシーケンスの組み合わせが複数ある可能性があります.対応する長さを出力するだけでいいです.あなたのアルゴリズムの時間的複雑さはO(n 2)であるべきです.ステップアップ:アルゴリズムの時間的複雑さをO(n log n)に下げることができますか?二分法を用いて解くことができ,本編はしばらく使わない
動的計画解題時間複雑度O(n^2)
本題の解法はすでにアップロードして、すぐにジャンプします
本題は力ボタンに由来し、より多くの解題構想は本題に飛び込んでください.
例1
入力:[10,9,2,5,3,7101,18]出力:4解釈:最も長い上昇サブシーケンスは[2,3,7101]であり、その長さは4である.
説明:最長上昇サブシーケンスの組み合わせが複数ある可能性があります.対応する長さを出力するだけでいいです.あなたのアルゴリズムの時間的複雑さはO(n 2)であるべきです.ステップアップ:アルゴリズムの時間的複雑さをO(n log n)に下げることができますか?二分法を用いて解くことができ,本編はしばらく使わない
動的計画解題時間複雑度O(n^2)
var lengthOfLIS = function(nums) {
let dp = new Array(nums.length).fill(1) // dp, 1,
for (let i = 0; i < nums.length; i++) {
for (let j = 0; j < i; j++) {
if(nums[i] > nums[j]){
dp[i] = Math.max(dp[i], dp[j] + 1)
}
}
}
var i = 0
var max = 0
while(i < nums.length){
max = Math.max(dp[i], max)
i++
}
return max
};
本題の解法はすでにアップロードして、すぐにジャンプします
本題は力ボタンに由来し、より多くの解題構想は本題に飛び込んでください.