【Leetcode刷題篇】leetcode300 最長上升子序列
阿新 • • 發佈:2020-12-09
給定一個無序的整數陣列,找到其中最長上升子序列的長度。
示例:
輸入: [10,9,2,5,3,7,101,18]
輸出: 4
解釋: 最長的上升子序列是 [2,3,7,101],它的長度是 4。
說明:可能會有多種最長上升子序列的組合,你只需要輸出對應的長度即可。
你演算法的時間複雜度應該為 O(n2) 。
進階: 你能將演算法的時間複雜度降低到 O(n log n) 嗎?
解題思路:動態規劃解題
class Solution {
public int lengthOfLIS(int[] nums) {
// 對其判斷
if(nums.length==0){
return 0;
}
// 動態規劃解題
int[] dp = new int[nums.length+1];
dp[0] = 1;
// 結果記錄
int maxLens = 1;
// 對其賦值
for(int i=1;i<nums.length;i++){
// 先賦值
dp[i] = 1;
for(int j=0;j< i;j++){
//判斷並更新
if(nums[i]>nums[j]){
// 記錄狀態更新
dp[i] = Math.max(dp[i],dp[j]+1);
}
}
// 更新最大值
maxLens = Math.max(maxLens,dp[i]);
}
return maxLens;
}
}