工信部网站备案被注销,电子信息工程网,一个美工做网站好做吗,南昌网站设计建设第九章 动态规划part13
300. 最长递增子序列
给你一个整数数组 nums #xff0c;找到其中最长严格递增子序列的长度。
子序列 是由数组派生而来的序列#xff0c;删除#xff08;或不删除#xff09;数组中的元素而不改变其余元素的顺序。例如#xff0c;[3,6,2,7] 是数…第九章 动态规划part13
300. 最长递增子序列
给你一个整数数组 nums 找到其中最长严格递增子序列的长度。
子序列 是由数组派生而来的序列删除或不删除数组中的元素而不改变其余元素的顺序。例如[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。
没有想出来思维定式在状态定义。本题重点是递推公式
dp[i]前i天包含第i天的最长递增子序列的长度
class Solution {
public:int lengthOfLIS(vectorint nums) {vectorint dp(nums.size(),1);for(int i0;inums.size();i){for(int j0;ji;j){if(nums[i]nums[j]) dp[i]max(dp[i],dp[j]1);}}int maxLength0;for(int i0;inums.size();i){maxLengthmax(maxLength,dp[i]);}return maxLength;}
};
674. 最长连续递增序列
给定一个未经排序的整数数组找到最长且 连续递增的子序列并返回该序列的长度。
连续递增的子序列 可以由两个下标 l 和 rl r确定如果对于每个 l i r都有 nums[i] nums[i 1] 那么子序列 [nums[l], nums[l 1], ..., nums[r - 1], nums[r]] 就是连续递增子序列。 思路与上一题类似
class Solution {
public:int findLengthOfLCIS(vectorint nums) {vectorint dp(nums.size(),1);for(int i1;inums.size();i){if(nums[i]nums[i-1]) dp[i]dp[i-1]1;}int maxLength0;for(int i0;inums.size();i){maxLengthmax(maxLength,dp[i]);}return maxLength;}
};
718. 最长重复子数组
给两个整数数组 nums1 和 nums2 返回 两个数组中 公共的 、长度最长的子数组的长度 。
dp[i][j]:截止nums1前i个nums2 前j个存在的最长重复子数组的长度。
class Solution {
public:int findLength(vectorint nums1, vectorint nums2) {vectorvectorint dp(nums1.size(),vectorint(nums2.size(),0));for(int j0;jnums2.size();j){if(nums2[j]nums1[0]) dp[0][j]1;}for(int i0;inums1.size();i){if(nums1[i]nums2[0]) dp[i][0]1;}for(int i1;inums1.size();i){for(int j1;jnums2.size();j){if(nums1[i]nums2[j]) dp[i][j]dp[i-1][j-1]1;}}int maxLength0;for(int i0;inums1.size();i){for(int j0;jnums2.size();j){maxLengthmax(maxLength,dp[i][j]);}}return maxLength;}
};