classSolution{publicintlengthOfLIS(int[] nums){// 明确dp数组的定义// dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度int[] dp =newint[nums.length];for(int i =0; i < nums.length; i++){// 初始化
dp[i]=1;}int result =1;for(int i =1; i < nums.length; i++){for(int j =0; j < i; j++){if(nums[i]> nums[j]){//位置i的最长升序子序列等于j从0到i-1各个位置的最长升序子序列 + 1 的最大值。// 动态规划的秘密,滚动数组,现在的状态后面会用到
dp[i]=Math.max(dp[i], dp[j]+1);}}if(dp[i]> result){
result = dp[i];}}return result;}}
674. 最长连续递增序列
// 动态规划。连续classSolution{publicintfindLengthOfLCIS(int[] nums){int[] dp =newint[nums.length];for(int i =0; i < nums.length; i++){
dp[i]=1;}for(int i =1; i < nums.length; i++){if(nums[i]> nums[i-1]){
dp[i]= dp[i-1]+1;}}int result =1;for(int i =0; i < nums.length; i++){
result =Math.max(dp[i],result);}return result;}}// 贪心算法classSolution{publicintfindLengthOfLCIS(int[] nums){int result =1;int count =1;for(int i =1; i < nums.length; i++){if(nums[i]> nums[i-1]){
count++;}else{
count =1;}
result =Math.max(result,count);}return result;}}
718. 最长重复子数组
classSolution{publicintfindLength(int[] nums1,int[] nums2){// 不好理解。int[][] dp =newint[nums1.length+1][nums2.length+1];int result =0;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;
result =Math.max(result,dp[i][j]);}}}return result;}}