最长上升子序列

69 阅读1分钟

639.jpeg

最长上升子序列

采用动态规划算法

解题思路,递推公式

j<i

num[j]<num[i]

dp[i]=max(dp[i],dp[j]+1)

/**  
* 最长上升子序列  
* @param nums 【1,3,4,5,1,2,3】  
* @return 4  
*/  
public static int lengthOfLis(int[] nums) {  
    int n = nums.length;  
    if (n == 0) {  
        return 0;  
    }  
    int dp[] = new int[n];  
    int max = 0;  
    for (int i = 0; i < n; i++) {  
        dp[i] = 1;  
        for (int j = 0; j < i; j++) {  
            if (nums[j] < nums[i]) {  
                dp[i] = Math.max(dp[i], dp[j] + 1);  
            }  
        }  
        max = Math.max(dp[i], max);  
    }  
    return max;  
}