力扣300. 最长递增子序列
2023-12-14 05:46:07
动态规划
- 思路:
- 假设 dp[i] 为前 i 个元素构成的最长递增子序列的个数,包含 nums[i];
- 则 dp[i] 构成序列上一个元素 nums[j] 构成最长递增子序列 dp[j],则 dp[i] = dp[j] + 1;
- 如果动态取 j ∈ [0, i - 1],则选取其中最长递增子序列值中最大的,其值 + 1 来更新 dp[i] 的值;
class Solution {
public:
int lengthOfLIS(vector<int>& nums) {
int size = (int)nums.size();
if (size == 0) {
return 0;
}
std::vector<int> dp(size, 0);
for (int i = 0; i < size; ++i) {
dp[i] = 1;
for (int j = 0; j < i; ++j) {
if (nums[j] < nums[i]) {
dp[i] = std::max(dp[i], dp[j] + 1);
}
}
}
return *std::max_element(dp.begin(), dp.end());
}
};
文章来源:https://blog.csdn.net/N_BenBird/article/details/134984837
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!