在这个示例中,lengthOfLIS
函数使用动态规划来找到最长升序子序列的长度。它维护一个 dp
数组,其中 dp[i]
表示以第 i
个元素结尾的最长升序子序列的长度。通过在数组中遍历元素,比较当前元素与之前元素的大小,不断更新 dp
数组,最终得到最长升序子序列的长度。
对于给定的示例数组 {10, 22, 9, 33, 21, 50, 41, 60, 80}
,最长升序子序列是 {10, 22, 33, 50, 60, 80}
,其长度为 6。
#include <iostream>
#include <vector>
int lengthOfLIS(std::vector<int>& nums) {
int n = nums.size();
if (n == 0) {
return 0;
}
std::vector<int> dp(n, 1); // dp[i] 表示以第i个元素结尾的最长升序子序列的长度
int maxLength = 1; // 记录最长升序子序列的长度
for (int i = 1; i < n; i++) {
for (int j = 0; j < i; j++) {
if (nums[i] > nums[j]) {
dp[i] = std::max(dp[i], dp[j] + 1);
}
}
maxLength = std::max(maxLength, dp[i]);
}
return maxLength;
}
int main() {
std::vector<int> nums = {10, 22, 9, 33, 21, 50, 41, 60, 80};
int result = lengthOfLIS(nums);
std::cout << "Length of Longest Increasing Subsequence: " << result << std::endl;
return 0;
}