一、问题描述
Given an unsorted array of integers, find the length of longest increasing subsequence.
For example,
Given [10, 9, 2, 5, 3, 7, 101, 18],
The longest increasing subsequence is [2, 3, 7, 101], therefore the length is 4.
Note that there may be more than one LIS combination, it is only necessary for you to return the length.
Your algorithm should run in O(n2) complexity.
Follow up: Could you improve it to O(n log n) time complexity?
动态规划
三、代码
class Solution {
public:
int lengthOfLIS(vector<int>& nums) {
int n = nums.size();
if (n == 0) {
return 0;
}
int res[10000];
for (int i = 0; i < n; i++) {
res[i] = 1;
}
int count = 1;
for (int i = 0; i < n; i++) {
for (int j = i+1; j < n; j++) {
if (nums[i] < nums[j]) {
res[j] = max(res[i]+1, res[j]);
if (res[j] > count) {
count = res[j];
}
}
}
}
return count;
}
};
本文介绍了一种使用动态规划解决最长递增子序列问题的方法,并提供了一个示例代码实现,该算法的时间复杂度为O(n²),同时探讨了更高效的O(n log n)解决方案。

被折叠的 条评论
为什么被折叠?



