1.题目描述
2.代码
class Solution {
public:
int maxNonDecreasingLength(vector<int>& nums1, vector<int>& nums2) {
int n = nums1.size();
vector<vector<int>> f(n, vector<int>(2, 1)); // f[i][j] 表示以 nums[0][i] 和 nums[j][i] 结尾的最长非降子序列的长度
vector<vector<int>> nums = { nums1, nums2 }; // 将 nums1 和 nums2 放到一个数组中,方便遍历
int res = 1; // 最长非降子序列的长度
for (int i = 1; i < n; ++i) {
for (int j = 0; j < 2; ++j) {
if (nums[0][i - 1] <= nums[j][i]) f[i][j] = f[i - 1][0] + 1; // 如果可以将 nums[j][i] 加入以 nums[0][i-1] 和 nums[j][i] 结尾的最长非降子序列,则更新 f[i][j]
res = max(f[i][j], res); // 更新最长非降子序列的长度
if (nums[1][i - 1] <= nums[j][i]) f[i][j] = max(f[i][j], f[i - 1][1] + 1); // 如果可以将 nums[j][i] 加入以 nums[1][i-1] 和 nums[j][i] 结尾的最长非降子序列,则更新 f[i][j]
res = max(f[i][j], res); // 更新最长非降子序列的长度
}
}
return res;
}
};