1. 程式人生 > 其它 >【Leetcode刷題篇】leetcode300 最長上升子序列

【Leetcode刷題篇】leetcode300 最長上升子序列

技術標籤:LeetCode刷題篇動態規劃最長上升子序列

給定一個無序的整數陣列,找到其中最長上升子序列的長度。

示例:
輸入: [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; } }