代码随想录算法训练营第五十二天 | 连续子序列

● 今日学习的文章链接和视频链接

题目300.最长递增子序列
题目674. 最长连续递增序列
题目718. 最长重复子数组

● 看到题目的第一想法

系列题来了

● 看完代码随想录之后的想法

很清晰

● 实现过程中遇到哪些困难

718

● 解题代码

  1. 点击查看代码
    class Solution {
        public int lengthOfLIS(int[] nums) {
    		if(nums.length == 1) return nums.length;
    		int[] dp = new int[nums.length];
    		int res = 0;
    		Arrays.fill(dp, 1);
    		for (int i = 1; i < dp.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;
        }
    }
    
  2. 点击查看代码
    class Solution {
        public int findLengthOfLCIS(int[] nums) {
    		if(nums.length == 1) return nums.length;
    		int[] dp = new int[nums.length];
    		int res = 0;
    		int begin = 0;
    		Arrays.fill(dp, 1);
    		for (int i = 1; i < dp.length; i++) {
    			for (int j = begin; j < i; j++) {
    				if (nums[i] > nums[j]) {
    					dp[i] = Math.max(dp[i], dp[j] + 1);
    				}else{
    					begin = j+1;
    					dp[i] = 1;
    					continue;
    				}
    				res = Math.max(res, dp[i]);
    				//System.out.println("res = " + res);
    			}
    		}
    		if(res == 0) return 1;
    		return res;
        }
    }
    
  3. 点击查看代码
    class Solution {
        public int findLength(int[] nums1, int[] nums2) {
    		int result = 0;
    		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;
    					result = Math.max(result, dp[i][j]);
    				}
    			}
    		}
    
    		return result;
        }
    }
    

● 今日收获,学习时长

今日收获:学了系列题
学习时长:1h
posted @ 2024-01-20 16:54  雨年今天有记录吗  阅读(0)  评论(0)    收藏  举报