代码随想录算法训练营第五十二天| 300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组
300.最长递增子序列
题目链接 文章讲解
class Solution {
public :
int lengthOfLIS ( vector< int > & nums) {
int ans = 1 ;
int n = nums. size ( ) ;
vector< int > dp ( n, 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 ) ;
}
if ( dp[ i] > ans) ans = dp[ i] ;
}
return ans;
}
} ;
674. 最长连续递增序列
题目链接 文章讲解
class Solution {
public :
int findLengthOfLCIS ( vector< int > & nums) {
int n = nums. size ( ) ;
int ans = 1 ;
vector< int > dp ( n, 1 ) ;
for ( int i = 1 ; i < n; i++ ) {
if ( nums[ i] > nums[ i - 1 ] ) dp[ i] = dp[ i - 1 ] + 1 ;
if ( dp[ i] > ans) ans = dp[ i] ;
}
return ans;
}
} ;
718. 最长重复子数组
题目链接 文章讲解
class Solution {
public :
int findLength ( vector< int > & nums1, vector< int > & nums2) {
int ans = 0 ;
vector< int > dp ( nums2. size ( ) + 1 , 0 ) ;
for ( int i = 1 ; i <= nums1. size ( ) ; i++ ) {
for ( int j = nums2. size ( ) ; j >= 1 ; j-- ) {
if ( nums1[ i - 1 ] == nums2[ j - 1 ] )
dp[ j] = dp[ j - 1 ] + 1 ;
else
dp[ j] = 0 ;
ans = max ( ans, dp[ j] ) ;
}
}
return ans;
}
} ;