300.最长递增子序列
题目链接:300.最长递增子序列
文档链接:300.最长递增子序列
视频链接:动态规划之子序列问题,元素不连续!| LeetCode:300.最长递增子序列
C++实现
class Solution {
public:
int lengthOfLIS(vector<int>& nums) {
if(nums.size() <= 1) return nums.size();
vector<int> dp(nums.size(), 1);
int result = 0;
for(int i=1; i<nums.size();i++){
for(int j = 0; j<i;j++){
if(nums[i] > nums[j]){
dp[i] = max(dp[i], dp[j] +1);
}
}
if(result < dp[i]){
result = dp[i];
}
}
return result;
}
};
674. 最长连续递增序列
题目链接:674. 最长连续递增序列
文档链接:674. 最长连续递增序列
视频链接:动态规划之子序列问题,重点在于连续!| LeetCode:674.最长连续递增序列
C++实现
class Solution {
public:
int findLengthOfLCIS(vector<int>& nums) {
if(nums.size() <= 1) return nums.size();
vector<int> dp(nums.size(), 1);
int result = 0;
for(int i = 1; i<nums.size(); i++){
if(nums[i] > nums[i - 1]){
dp[i] = max(dp[i], dp[i -1] + 1);
}
if(result < dp[i]){
result = dp[i];
}
}
return result;
}
};
718. 最长重复子数组
题目链接:718. 最长重复子数组
文档链接:718. 最长重复子数组
视频链接:动态规划之子序列问题,想清楚DP数组的定义 | LeetCode:718.最长重复子数组
C++实现
class Solution {
public:
int findLength(vector<int>& nums1, vector<int>& nums2) {
vector<vector<int>> dp(nums1.size() + 1, vector<int>(nums2.size() + 1, 0));
int result = 0;
for(int i = 1; i<=nums1.size(); i++){
for(int j = 1; j<= nums2.size(); j++){
if(nums1[i - 1] == nums2[j - 1]){
dp[i][j] = dp[i-1][j -1] + 1;
}
if(result < dp[i][j]){
result = dp[i][j];
}
}
}
return result;
}
};