執行結果:
通過
顯示詳情
執行用時 :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個前面的最大上升子序列
代碼:
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;
}
}