LeetCode 打卡day52--动态规划之子序列问题

news2024/12/30 3:53:15

一个人的朝圣 — LeetCode打卡第52天

  • 知识总结
  • Leetcode 300. 最长递增子序列
    • 题目说明
    • 代码说明
  • Leetcode 674. 最长连续递增序列
    • 题目说明
    • 代码说明
  • Leetcode 718. 最长重复子数组
    • 题目说明
    • 代码说明


知识总结

今天运用动态规划来解决子序列问题.
子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。

连续子序列 等价于 子数组


Leetcode 300. 最长递增子序列

题目链接

题目说明

给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。

子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。
在这里插入图片描述

代码说明

dp[] 数组的含义, 以nums[i]元素结尾的递增子序列的最大长度, 但是全局的最大递增子序列长度不一定就是以nums[len-1]的元素结尾, 所有需要遍历整个dp数组来找最大值.

递推公式

dp[i] = Math.max(dp[i], dp[j]+1)

class Solution {
    public int lengthOfLIS(int[] nums) {
        int len = nums.length;
        if(len == 1) return 1;
        int[] dp = new int[len];
        Arrays.fill(dp, 1);
        int maxCount = 0;
        for(int i = 1; i < len; i++){
            for(int j = 0; j < i; j++){
                if(nums[i] > nums[j]) {
                    dp[i] = Math.max(dp[i], dp[j]+1);
                }
                maxCount = Math.max(dp[i], maxCount);
            }
        }
        // System.out.println(Arrays.toString(dp));
        return maxCount;
    }
}

Leetcode 674. 最长连续递增序列

题目链接

题目说明

给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。

连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], …, nums[r - 1], nums[r]] 就是连续递增子序列。

代码说明

因为要求是连续的递增序列, 所以只需要比较nums[i] 和 nums[i-1] 即可, 之前的题目是比较nums[i] 和 0~i 的所有元素

class Solution {
    public int findLengthOfLCIS(int[] nums) {
        int len = nums.length;
        int[] dp = new int[len];
        int maxCount = 1;
        dp[0] = 1;
        for(int i= 1; i < len; i++){
            if(nums[i] > nums[i-1]){
                dp[i] = dp[i-1] + 1;
            }else{
                dp[i] = 1;
            }
            maxCount = Math.max(maxCount, dp[i]);
        }
        return maxCount;
    }
}

Leetcode 718. 最长重复子数组

题目链接

题目说明

给两个整数数组 nums1 和 nums2 ,返回 两个数组中 公共的 、长度最长的子数组的长度 。
在这里插入图片描述

代码说明

这里的dp数组 dp[i][j] 代表的是元素nums1[0:i) 和 nums2[0:j)之间的最大公共数组长度(左闭右开), 这样可以简化代码

class Solution {
    public int findLength(int[] nums1, int[] nums2) {
        int l1 = nums1.length, l2 = nums2.length;

        int[][] dp = new int[l1+1][l2+1];
        int maxCount =0;
        for(int i = 1; i <= l1; i++){
            for(int j = 1; j <=l2; j++){
                if(nums1[i-1] == nums2[j-1]){
                    dp[i][j] = dp[i-1][j-1] + 1;
                }
                if(dp[i][j] > maxCount) maxCount = dp[i][j];
            }
        }
        return maxCount;
    }
}

否则代码会变长很多, 这里da[i][j] 代表的是nums1[0:i+1)和nums2[0:j+1) 之间的最大公共数组长度(左闭右开),

class Solution {
    public int findLength(int[] nums1, int[] nums2) {
        int l1 = nums1.length, l2 = nums2.length;

        int[][] dp = new int[l1][l2];

        //initialization
        for(int i = 0; i < l1; i++){
            int count = 0;
            if(nums1[i] == nums2[0]){
                count = 1;
            }
            dp[i][0] = count;
        }

        for(int j = 0; j < l2; j++){
            int count = 0;
            if(nums1[0] == nums2[j]){
                count = 1;
            }
            dp[0][j] = count;
        }
        int maxCount =0;

        for(int i = 1; i < l1; i++){
            for(int j = 1; j < l2; j++){
                if(nums1[i] == nums2[j]){
                    dp[i][j] = dp[i-1][j-1] + 1;
                }
            }
        }

        for(int i = 0; i < l1; i++){
            for(int j = 0; j < l2; j++){
                maxCount = Math.max(maxCount, dp[i][j]);
            }
        }
        return maxCount;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/704687.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Debezium系列之:深入理解tinyint(n)

Debezium系列之:深入理解tinyint 一、背景二、相关技术博客三、查看表的ddl四、深入理解tinyint(n)五、创建表六、插入数据七、查看topic数据八、总结一、背景 数据库修改了字段类型为tinyint,希望采集的时候能够转化为boolean类型,数据库字段类型如下图所示: 在设置了conv…

机器学习笔记 - Facebook AI Similarity Search(Faiss)简介

一、概述 Facebook AI Similarity Search (Faiss)是高效相似性搜索最受欢迎的轮子之一。给定一组向量,我们可以使用 Faiss 对它们进行索引——然后使用另一个向量(查询向量),我们在索引中搜索最相似的向量。 它包含搜索任何大小的向量集的算法,除非超出RAM的大小。它还包…

Go 语言精进之路——Go语言代码块与作用域理解

文章目录 前言代码块与作用域简介if 条件控制语句的代码块其他控制语句的代码块 前言 如果不深入理解 Go 语言的代码块作用域&#xff0c;程序将产生我们无法理解的行为&#xff0c;比如说在循环中创建 goroutine func, 为什么需要传递参数至 goroutine 内部&#xff0c;否则所…

柠檬精僵尸2023-2024_wb粉丝清道夫比赛博更好用的方法

微博批量移除微博粉丝方法_可视化的界面 多样性选择你要移除清理的粉丝类型 三个按钮就可以搞定了 移除粉丝步骤&#xff1a; 首先打开微博&#xff0c;登陆自己的账号。 找到你想要删除的粉丝&#xff0c;点开他/她的头像&#xff0c;打开他/她的个人主页 如果想要大批量清理…

尚硅谷Docker实战教程-笔记04【Docker镜像】

尚硅谷大数据技术-教程-学习路线-笔记汇总表【课程资料下载】视频地址&#xff1a;尚硅谷Docker实战教程&#xff08;docker教程天花板&#xff09;_哔哩哔哩_bilibili 尚硅谷Docker实战教程-笔记01【理念简介、官网介绍、平台入门图解、平台架构图解】尚硅谷Docker实战教程-笔…

accountId、uid、roleId 游戏中的3种id

1)accountId&#xff1a; // 是一个字符串 这个是字符串&#xff0c;玩家可以输入名字(比如:输入zfoo) 或者 通过微信生成(openid是不变的)。 2)uid&#xff1a;// long 这个是一个很长的,玩家通过http登录授权后&#xff0c;通过web层&#xff0c;由雪花算法根据accountId生成…

【每天40分钟,我们一起用50天刷完 (剑指Offer)】第十一天 11/50

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…

Selenium上传文件有多少种方式?不信你有我全

Selenium 封装了现成的文件上传操作。但是随着现代前端框架的发展&#xff0c;文件上传的方式越来越多样。而有一些文件上传的控件&#xff0c;要做自动化控制会更复杂一些&#xff0c;这篇文章主要讨论在复杂情况下&#xff0c;如何通过自动化完成文件上传 1.input 元素上传文…

【FFmpeg实战】AAC编码, 解码

使用命令行进行AAC编码 // PCM的三要素采样率&#xff0c;声道数&#xff0c; 采样格式 ffmpeg -ar 44100 -ac 2 -f s16le -i in.pcm out.aac// -c:a codec:audio 指定的是音频编码 ffmpeg -ar 44100 -ac 2 -f s16le -i in.pcm -c:a libfdk_aac out.aacffmpeg -ar 44100 -ac …

哪些辅助工具支持快递单号的批量查询

当我们批量发出大量快递时&#xff0c;有什么查询软件可以快速查询和跟踪批量每个单号的物流信息&#xff0c;及时跟踪物流状态&#xff1f;今天&#xff0c;我来安利一个软件&#xff1a;“固乔快递查询助手”&#xff0c;可以实现这个功能。我们一起来看看软件的使用和操作步…

C++类与对象(默认成员函数之拷贝构造函数)

接前几次的类与对象的默认函数的知识点&#xff0c;下来面是默认成员函数中的拷贝构造函数。是的&#xff0c;它的名字是拷贝构造函数&#xff0c;他其实也是一种构造函数&#xff0c;为什么呢&#xff1f;接下来你就知道了&#xff0c;我们直接看看代码&#xff0c;如下&#…

【AICG】【Midjourney】AI自动生成图片的初接触

背景 现在是AI 比较流行&#xff0c;公司也推荐学习和了解AI的相关东西。 公司的内部培训中涉及到了Midjourney的简单讲解。 效果 由于我的账号注册的时候过了free窗口期&#xff1a; 现在要我花钱订阅&#xff1a; 只能看看其他人的帖子过过AI生成的瘾。 如图所示&#x…

【TA100】4.2 SSAO算法 屏幕空间环境光遮蔽

1 SSAO介绍 1.1 环境光遮蔽&#xff08;AO&#xff09; 全称Ambient Occlusion,是计算机图形学中一种着色和渲染技术&#xff0c;模拟光线达到物体的能力的粗略的全局方法&#xff0c;描述光线到达物体表面的能力。 这个场景看起来没有表示颜色的贴图&#xff0c;但是场景的…

SC5103接口可pin对pin兼容TLK1501

SC5103 用于超高速双向点对点数据传输系统。SC5103 支持 0.6Gbps 至 1.5Gbps 的有效串行接口速度&#xff0c;提供高达 1.2Gbps 的有效数据带宽。可pin对pin兼容TLK1501。 SC5103 可替代并行传输数据结构从而减少传输路径数、连接端子数、发送/接收端子数。并行数据被发送链路转…

求职贴 | 多源融合定位方向24届硕士秋招求职

求职方向 多源融合定位 / LIO / VIO 基本情况 现就读于华中区某985&#xff0c;研究方向为多源融合定位&#xff0c;主要内容是LiDAR / IMU融合两篇期刊论文在投&#xff0c;论文内容即项目经历&#xff1b;具有丰富的电子设计类竞赛经历自我认为学习能力强&#xff0c;爱动…

JavaSE-15 【异常】

文章目录 JavaSE-15 【异常】第一章 什么是异常1.1 异常的概念1.2 异常的体系1.3 异常的分类1.4 异常产生的过程 第二章 异常的处理2.1 抛出异常throw2.2 声明异常throws2.3 捕获异常try...catch2.4 finally 代码块2.5 异常注意事项 第三章 自定义异常3.1 自定义异常概述3.2 自…

工业物联网解决方案:远程组态监控管理系统

如何高效的采集和集中工业设备PLC运行数据、工艺参数、产品质量等生产数据&#xff0c;通过数据分析反馈在制造工艺、生产流程、质量管理、设备维护和能耗管理的智能应用&#xff0c;这是工业远程组态监控管理系统可以解决的问题&#xff0c;也是众多工厂企业关注的重点。 工…

动态规划--输出路径06.25

https://www.cnblogs.com/jbelial/articles/2116074.html 博客参考 https://www.cnblogs.com/jbelial/articles/2116074.html 12. 背包问题求具体方案 - AcWing题库 由于需要求解最小字典序&#xff0c;尝试输入数据时逆序输入&#xff0c;其他不改变&#xff0c;状态含义不变…

奇安信浏览器调用JM9硬件解码操作教程

本文讲述如何通过奇安信浏览器调用景嘉微JM9系列显卡的硬件解码。 判断硬件解码是否打开方法 1.检查奇安信浏览器版本。dpkg -l | grep qaxbrowser&#xff0c;我这里是1.0.45209.2-1版本。要大于等于这个版本的奇安信浏览器才支持硬件解码。 2.打开奇安信浏览器&#xff…