最长上升子序列

题目:
给定一个无序的整数数组,找到其中最长上升子序列的长度。

示例:

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

class Solution {
    public int lengthOfLIS(int[] nums) {
        int n = nums.length;
        if(n == 0)
            return 0;
        
        //数组定义:dp[i]表示0 -> i-1的最长上升子序列的长度
        int dp[] = new int[n + 1];
        
		//初始化
        dp[0] = 0;
        dp[1] = 1;
        int ans = 1;
        
        /**
        状态方程:dp[i] = max(dp[i], dp[j] + 1)
        **/
        for(int i = 2; i <= n; i++) {
            dp[i] = 1;
            
            for(int j = 0; j < i - 1; j++) {
                if(nums[j] < nums[i - 1]) {
                    dp[i] = Math.max(dp[i], dp[j + 1] + 1);
                }
            }
            
            ans = Math.max(ans, dp[i]);
        }
        
        return ans;
    }
}
posted on 2020-11-20 16:48  KobeSacre  阅读(75)  评论(0编辑  收藏  举报