代码随想录训练营day52 | 动态规划part13

1、300.最长递增子序列

首先通过本题大家要明确什么是子序列,"子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序"。

java 复制代码
class Solution {
    public int lengthOfLIS(int[] nums) {
        int[] dp = new int[nums.length];
        int res = 1;
        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、674.最长连续递增子序列

本题相对于昨天的动态规划:300.最长递增子序列 (opens new window)最大的区别在于"连续"。

本题要求的是最长连续递增序列

java 复制代码
/**
     * 1.dp[i] 代表当前下标最大连续值
     * 2.递推公式 if(nums[i+1]>nums[i]) dp[i+1] = dp[i]+1
     * 3.初始化 都为1
     * 4.遍历方向,从其那往后
     * 5.结果推导 。。。。
     * @param nums
     * @return
     */
    public static int findLengthOfLCIS(int[] nums) {
        int[] dp = new int[nums.length];
        for (int i = 0; i < dp.length; i++) {
            dp[i] = 1;
        }
        int res = 1;
	//可以注意到,這邊的 i 是從 0 開始,所以會出現和卡哥的C++ code有差異的地方,在一些地方會看到有 i + 1 的偏移。
        for (int i = 0; i < nums.length - 1; i++) {
            if (nums[i + 1] > nums[i]) {
                dp[i + 1] = dp[i] + 1;
            }
            res = res > dp[i + 1] ? res : dp[i + 1];
        }
        return res;
    }
3、718.最长重复子数组

注意题目中说的子数组,其实就是连续子序列。

要求两个数组中最长重复子数组,如果是暴力的解法 只需要先两层for循环确定两个数组起始位置,然后再来一个循环可以是for或者while,来从两个起始位置开始比较,取得重复子数组的长度

java 复制代码
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;
    }
}
相关推荐
多米Domi0111 分钟前
0x3f第九天复习(考研日)(10.57-14:00)
python·算法
byzh_rc9 分钟前
[模式识别-从入门到入土] 拓展-EM算法
算法·机器学习·概率论
努力学算法的蒟蒻12 分钟前
day41(12.22)——leetcode面试经典150
算法·leetcode·面试
liliangcsdn13 分钟前
Python拒绝采样算法优化与微调模拟
人工智能·算法·机器学习
Christo314 分钟前
2024《A Rapid Review of Clustering Algorithms》
人工智能·算法·机器学习·数据挖掘
AndrewHZ17 分钟前
【图像处理基石】图像梯度:核心算法原理与经典应用场景全解析
图像处理·算法·计算机视觉·cv·算子·边缘提取·图像梯度
让学习成为一种生活方式18 分钟前
组蛋白短链酰化修饰--文献精读187
算法
fei_sun22 分钟前
数字图像处理
人工智能·算法·计算机视觉
Tisfy26 分钟前
LeetCode 960.删列造序 III:动态规划(最长递增子序列)
算法·leetcode·动态规划·字符串·题解·逆向思维
多米Domi01127 分钟前
0x3f第十天复习(考研日2)(9.18-12.30,14.00-15.00)
python·算法·leetcode