本文主要是介绍代码随想录算法训练营Day51 | 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
代码随想录算法训练营Day51 | 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组
LeetCode 300.最长递增子序列
题目链接:LeetCode 300.最长递增子序列
思路:
选取最长子序列,并收集
class Solution {
public:int lengthOfLIS(vector<int>& nums) {int n = nums.size();vector<int> dp(n, 1);dp[0] = 1;int result = 1;for(int i=1; i<n; i++){for(int j=0; j<i; j++){if(nums[i]>nums[j]) dp[i] = max(dp[i], dp[j]+1); }result = max(result, dp[i]);}return result;}
};
注意 :
- 用max收集最长子序列
LeetCode 674. 最长连续递增序列
题目链接:LeetCode 674. 最长连续递增序列
思路:
记录最大即可
class Solution {
public:int findLengthOfLCIS(vector<int>& nums) {int n = nums.size();vector<int> dp(n,1);int result = 1;for(int i = 1; i < n; i++){for(int j=1; j<=i; j++){if(nums[j]>nums[j-1]) dp[j] = dp[j-1]+1;result = max(result, dp[j]);}}return result;}
};
注意 :
1.
2.
3.
4.
LeetCode 718. 最长重复子数组
题目链接:LeetCode 718. 最长重复子数组
思路:
dp[i][j]的定义是i-1,j-1的最长重复子数组
class Solution {
public:int findLength(vector<int>& nums1, vector<int>& nums2) {vector<vector<int>> dp(nums1.size()+1, vector<int>(nums2.size()+1));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;result = max(dp[i][j], result);}}return result;}
};
注意 :
- 判断条件为i-1和j-1
这篇关于代码随想录算法训练营Day51 | 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!