最长上升子序列
题目要求时间复杂度为O(n2),采用动态规划的思想,用一个数组d记录当前index时,以Array[index]结尾的最长上升子序列。这样,通过一次遍历,内部嵌套一个0:index处的比较,就能更新完d数组,最长上升子序列的长度即是max(d[i]).
代码如下
int lengthOfLIS(vector<int>& nums) {
if(nums.size()==0)
return 0;
int* d=new int[nums.size()];
int len=1;
for(int i=0;i<nums.size();i++){
d[i]=1;
for(int j=0;j<i;j++){
if((nums[j]<nums[i])&&(d[j]+1>=d[i]))
d[i]=d[j]+1;
}
if(d[i]>len)
len=d[i];
}
delete []d;
return len;
}
题目还说了,考虑如何将时间复杂度降到O(nlogn)
可以参考:https://leetcode.com/problems/longest-increasing-subsequence/solution/