day36

pwangikun / 2024-10-13 / 原文

最长递增子序列
class Solution {
public:
int lengthOfLIS(vector& nums) {
if (nums.size() <= 1) return nums.size();
vector dp(nums.size(), 1);
dp[0] = 1;
int ret = 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[j] + 1, dp[i]);
}
}
ret = max(ret, dp[i]);
}
return ret;
}
};

最长连续递增子序列

class Solution {
public:
int findLengthOfLCIS(vector& nums) {
vector dp(nums.size(), 1);
int ret = 1;
for(int i = 1; i < nums.size(); ++i)
{
if(nums[i] > nums[i-1])
{
dp[i] = dp[i-1] + 1;
}
ret = max(ret, dp[i]);
}
return ret;
}
};

最长重复子数组

class Solution {
public:
int findLength(vector& nums1, vector& nums2) {
vector<vector> dp(nums1.size()+1, vector(nums2.size()+1, 0));
int ret = 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;
ret = max(ret, dp[i][j]);
}
}
}
return ret;

}

};