300. 最长递增子序列
题目
链接
代码
class Solution {
public int lengthOfLIS ( int [ ] nums) {
if ( nums. length== 0 ) {
return 0 ;
}
int [ ] dp = new int [ nums. length] ;
dp[ 0 ] = 1 ;
int res = 1 ;
Arrays . fill ( dp, 1 ) ;
for ( int i = 1 ; i< nums. length; i++ ) {
for ( int j = 0 ; j< i; j++ ) {
if ( nums[ i] > nums[ j] ) {
dp[ i] = Math . max ( dp[ i] , dp[ j] + 1 ) ;
}
}
res = Math . max ( res, dp[ i] ) ;
}
return res;
}
}
674. 最长连续递增序列
题目
链接
代码
class Solution {
public int findLengthOfLCIS ( int [ ] nums) {
if ( nums. length== 0 ) {
return 0 ;
}
int result = 1 ;
int temp = 1 ;
for ( int i = 1 ; i< nums. length; i++ ) {
if ( nums[ i] > nums[ i- 1 ] ) {
temp++ ;
result = Math . max ( result, temp) ;
} else {
temp = 1 ;
}
}
return result;
}
}
718. 最长重复子数组
题目
链接
代码
class Solution {
public int findLength ( int [ ] nums1, int [ ] nums2) {
int [ ] [ ] dp = new int [ nums1. length+ 1 ] [ nums2. length+ 1 ] ;
int res = 0 ;
for ( int i = 1 ; i<= nums1. length; i++ ) {
for ( int j = 1 ; j<= nums2. length; j++ ) {
if ( nums1[ i- 1 ] == nums2[ j- 1 ] ) {
dp[ i] [ j] = dp[ i- 1 ] [ j- 1 ] + 1 ;
res = Math . max ( res, dp[ i] [ j] ) ;
}
}
}
return res;
}
}
1143. 最长公共子序列
题目
链接
代码
class Solution {
public int longestCommonSubsequence ( String text1, String text2) {
char [ ] arr1 = text1. toCharArray ( ) ;
char [ ] arr2 = text2. toCharArray ( ) ;
int [ ] [ ] dp = new int [ arr1. length+ 1 ] [ arr2. length+ 1 ] ;
for ( int i = 1 ; i<= arr1. length; i++ ) {
for ( int j = 1 ; j<= arr2. length; j++ ) {
if ( arr1[ i- 1 ] == arr2[ 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[ arr1. length] [ arr2. 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; i++ ) {
for ( int j = 1 ; j<= nums2. length; 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] ;
}
}