Leetcode刷題java之300. 最長上升子序列

執行結果:

通過

顯示詳情

執行用時 :21 ms, 在所有 Java 提交中擊敗了18.34% 的用戶

內存消耗 :41.3 MB, 在所有 Java 提交中擊敗了5.09%的用戶

題目:

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

示例:

輸入: [10,9,2,5,3,7,101,18]
輸出: 4 
解釋: 最長的上升子序列是 [2,3,7,101],它的長度是 4。

說明:


    可能會有多種最長上升子序列的組合,你只需要輸出對應的長度即可。
    你算法的時間複雜度應該爲 O(n2) 。


進階: 你能將算法的時間複雜度降低到 O(n log n) 嗎?

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/longest-increasing-subsequence
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

思路:

dp[i]表示第i個前面的最大上升子序列

採用動態規劃,參考https://leetcode-cn.com/problems/longest-increasing-subsequence/solution/zui-chang-shang-sheng-zi-xu-lie-by-leetcode/

代碼:

class Solution {
    public int lengthOfLIS(int[] nums) {
        if(nums.length==0)
        {
            return 0;
        }
        int[] dp=new int[nums.length];
        int allmax=1;
        dp[0]=1;
        for(int i=1;i<nums.length;i++)
        {
            int max=0;
            for(int j=0;j<i;j++)
            {
                if(nums[i]>nums[j])
                {
                    max=Math.max(max,dp[j]);
                }
            }
            dp[i]=max+1;
            allmax=Math.max(allmax,dp[i]);
        }
        return allmax;
    }
}

 

發佈了476 篇原創文章 · 獲贊 485 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章