您的位置:首页 > 产品设计 > UI/UE

300. Longest Increasing Subsequence

2017-12-26 18:14 120 查看
1、题目描述

输入一个数组,返回最长的上升子序列长度。

2、思路

动归。dp[i]指的是以nums[i]结尾的最长的上升子序列长度。

dp[i] = max(dp[j]) + 1, 0<=j < i, nums[j]<nums[j].

dp[0] = 1.

ans = max(dp[i])

时间复杂度 O(n^2).

3、代码

动归:

int lengthOfLIS(vector<int>& nums) {
int n=nums.size();
if(n==0) return 0;
int dp
;
dp[0]=1;
int ans=1;
for(int i=1;i<n;i++){
int m = 0;
for(int j=0;j<i;j++){
if(nums[j]<nums[i]&&dp[j]>m)
m=dp[j];
}
dp[i]=m+1;
if(dp[i]>ans)
ans=dp[i];
}
return ans;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息