给出长度n的数组,找出这个数组的最长递增子序列,逐个输出,用c++完成
时间: 2024-02-27 18:57:27 浏览: 92
好的,那么下面是一个使用C++实现的最长递增子序列问题的代码:
```cpp
#include<iostream>
#include<vector>
using namespace std;
vector<int> longestIncreasingSubsequence(vector<int>& nums) {
int n = nums.size();
vector<int> dp(n, 1);
for(int i = 1; i < n; i++) {
for(int j = 0; j < i; j++) {
if(nums[j] < nums[i]) {
dp[i] = max(dp[i], dp[j] + 1);
}
}
}
int maxLen = *max_element(dp.begin(), dp.end());
vector<int> res;
for(int i = n - 1; i >= 0; i--) {
if(dp[i] == maxLen) {
res.push_back(nums[i]);
maxLen--;
}
}
reverse(res.begin(), res.end());
return res;
}
int main() {
vector<int> nums = {10, 9, 2, 5, 3, 7, 101, 18};
vector<int> res = longestIncreasingSubsequence(nums);
for(int i = 0; i < res.size(); i++) {
cout << res[i] << " ";
}
return 0;
}
```
这个算法的时间复杂度是O(n^2),空间复杂度是O(n),在实际应用中可以处理一些规模比较小的问题。如果要处理更大的规模,可以考虑使用一些更高效的算法,比如二分查找。
阅读全文