题目描述:
给定一个无序的整数数组,找到其中最长上升子序列的长度。
示例:
输入: [10,9,2,5,3,7,101,18]
输出: 4
解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-increasing-subsequence
==============================================================================
思路
- dp[i]表示i位置最长上升子序列的长度
- dp[i]的值如何确定:dp[i]=max(dp[i],nums[j]+1),其中0<=j<i且nums[j]<nums[i]
题解:
public int lengthOfLIS(int[] nums) {
int len = nums.length;
if(len==0){
return 0;
}
if(len==1){
return 1;
}
//dp[i]表示i位置最长上升子序列的长度
int[] dp= new int[len];
Arrays.fill(dp,1);
for(int i=1;i<len;i++){
for(int j=0;j<i;j++){
if(nums[j]<nums[i]){
dp[i]=Math.max(dp[i],dp[j]+1);
}
}
}
return Arrays.stream(dp).max().getAsInt();
}