代码随想录算法训练营天 第九章 五十三天| 1143.最长公共子序列 1035.不相交的线 53. 最大子序和
1143.最长公共子序列
class Solution {
public int longestCommonSubsequence ( String text1, String text2) {
int [ ] [ ] dp = new int [ text1. length ( ) + 1 ] [ text2. length ( ) + 1 ] ;
for ( int i = 1 ; i < text1. length ( ) + 1 ; i++ ) {
char char1 = text1. charAt ( i- 1 ) ;
for ( int j = 1 ; j < text2. length ( ) + 1 ; j++ ) {
char char2 = text2. charAt ( j- 1 ) ;
if ( char1 == char2) {
dp[ i] [ j] = dp[ i- 1 ] [ j- 1 ] + 1 ;
} else {
dp[ i] [ j] = Math . max ( dp[ i- 1 ] [ j] , dp[ i] [ j- 1 ] ) ;
}
}
}
return dp[ text1. length ( ) ] [ text2. length ( ) ] ;
}
}
1035.不相交的线
class Solution {
public int maxUncrossedLines ( int [ ] nums1, int [ ] nums2) {
int [ ] [ ] dp = new int [ nums1. length+ 1 ] [ nums2. length+ 1 ] ;
for ( int i = 1 ; i < nums1. length+ 1 ; i++ ) {
for ( int j = 1 ; j < nums2. length+ 1 ; j++ ) {
if ( nums1[ i- 1 ] == nums2[ j- 1 ] ) {
dp[ i] [ j] = dp[ i- 1 ] [ j- 1 ] + 1 ;
} else {
dp[ i] [ j] = Math . max ( dp[ i- 1 ] [ j] , dp[ i] [ j- 1 ] ) ;
}
}
}
return dp[ nums1. length] [ nums2. length] ;
}
}
53. 最大子序和
class Solution {
public int maxSubArray ( int [ ] nums) {
int [ ] dp = new int [ nums. length] ;
dp[ 0 ] = nums[ 0 ] ;
int result = 0 ;
for ( int i = 1 ; i < nums. length; i++ ) {
dp[ i] = Math . max ( dp[ i- 1 ] + nums[ i] , nums[ i] ) ;
result = Math . max ( dp[ i] , result) ;
}
return result;
}
}