给定一个无序的整数数组,找到其中最长上升子序列的长度。
示例:
输入: [10,9,2,5,3,7,101,18]
输出: 4
解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。
我刚开始的想法是用数组存答案,即前三个数的最长上升长度是多少,前四个是多少……但是被打脸了。
看来答案,一个思路是用数组temp【K】存以K结尾的最大上升长度,最后遍历数组,查找最大的上升长度。
class Solution {
public int lengthOfLIS(int[] nums) {
if(nums.length==0)
return 0;
int len=nums.length,i,j,ans[]=new int[len];
ans[0]=1;
for(i=1;i<len;i++) {
ans[i]=1;
for(j=0;j<i;j++) {
if(nums[i]>nums[j])
ans[i]=Math.max(ans[i], ans[j]+1);//以nums[i]结尾的最大上升长度
}
}
int t=1;
for(i=1;i<len;i++)
if(ans[i]>t)
t=ans[i];
return t;
}
}
这一题给我的启示就是我之前对于DP的狭义认识就是用DP存答案,但是这是把DP作为一种中间工具,最后找到答案。