题目:longestIncreasingSubsequence
要求:
给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度。
样例:
给出 [5,4,1,2,3],LIS 是 [1,2,3],返回 3
给出 [4,2,4,5,3,7],LIS 是 [2,4,5,7],返回 4
算法要求:
要求时间复杂度为O(n^2) 或者 O(nlogn)
解题思路:
用dp数组存当前最长的长度。
算法如下:
int longestIncreasingSubsequence(vector<int> nums) {
// write your code here
if (nums.size() == 0) {
return 0;
}
int dp[1001] = {0};
int ans;
dp[1] = 1;
ans = 1;
int size = nums.size();
for(int i = 0; i < size; i++) {
int m = 0;
for(int j = 0; j < i; j++) {
if(dp[j] > m && nums[j] < nums[i]) {
m = dp[j];
}
}
dp[i] = m + 1;
if(dp[i] > ans) {
ans = dp[i];
}
}
return ans;
}