代码随想录刷题第52天|LeetCode300最长递增子序列、 LeetCode674最长连续递增序列、LeetCode718最长重复子数组

news2025/2/12 18:40:01

1、LeetCode300最长递增子序列

题目链接:300最长递增子序列

1、dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度。

2、递推公式:

if (nums[i] > nums[j]) dp[i] = max(dp[i], dp[j] + 1);

注意这里不是要dp[i] 与 dp[j] + 1进行比较,而是我们要取dp[j] + 1的最大值。

3、初始化:

每一个i,对应的dp[i](即最长递增子序列)起始大小至少都是1。

4、遍历顺序:从前向后。

5、举例推导。

class Solution {
public:
    int lengthOfLIS(vector<int>& nums) {
        if (nums.size() <= 1) return nums.size();
        int result = 0;
        vector<int> dp(nums.size(), 1);

        for (int i = 1; i < nums.size(); i++)
        {
            for (int j = 0; j < i; j++)
            {
                if (nums[i] > nums[j]) dp[i] = max(dp[i], dp[j] + 1);
            }
            if (dp[i] > result) result = dp[i];
        }

        return result;
    }
};

2、LeetCode674最长连续递增序列

题目链接:674最长连续递增序列

本题要求连续,不用两个循环,只要比较nums[i]和nums[i-1]。

1、dp[i]:以下标i为结尾的连续递增的子序列长度为dp[i]

2、递推公式:

本题要求连续递增子序列,所以就只要比较nums[i]与nums[i - 1],而不用去比较nums[j]与nums[i]

dp[i] = dp[i - 1] + 1;

3、初始化:最少也应该是1。

4、遍历顺序:从前到后。

5、举例推导。

class Solution {
public:
    int findLengthOfLCIS(vector<int>& nums) {
        if (nums.size() <= 1) return nums.size();
        int result = 0;
        vector<int> dp(nums.size(), 1);

        for (int i = 1; i < nums.size(); i++)
        {
            if (nums[i] > nums[i - 1]) dp[i] =  dp[i - 1] + 1;
            if (dp[i] > result) result = dp[i];
        }
        return result;
    }
};

3、LeetCode718最长重复子数组

题目链接:718 最长重复子数组

1、dp[i][j] :以下标i - 1为结尾的A,和以下标j - 1为结尾的B,最长重复子数组长度为dp[i][j]。

如果定义dp[i][j]为 以下标i为结尾的A,和以下标j 为结尾的B,实现起来会麻烦一点,需要单独处理初始化部分,如果nums1[i] 与 nums2[0] 相同的话,对应的 dp[i][0]就要初始为1。

2、递推公式:

dp[i][j] = dp[i - 1][j - 1] + 1;

如果查看之前是否有元素相同,两个数组都要回退,所以是dp[i - 1][j - 1]。

3、初始化:

dp[i][0] 和dp[0][j]其实都是没有意义的!

但dp[i][0] 和dp[0][j]要初始值,因为 为了方便递归公式dp[i][j] = dp[i - 1][j - 1] + 1;

所以dp[i][0] 和dp[0][j]初始化为0。

举个例子A[0]如果和B[0]相同的话,dp[1][1] = dp[0][0] + 1,只有dp[0][0]初始为0,正好符合递推公式逐步累加起来。

4、遍历顺序:从前向后。

5、举例推导:

 

class Solution {
public:
    int findLength(vector<int>& nums1, vector<int>& nums2) {
        vector<vector<int>> dp(nums1.size() + 1, vector<int>(nums2.size() + 1, 0));
        int result = 0;
        for (int i = 1; i <= nums1.size(); i++)
        {
            for (int j = 1; j <= nums2.size(); j++)
            {
                if (nums1[i - 1] == nums2[j - 1])
                {
                    dp[i][j] = dp[i - 1][j - 1] + 1;
                }
                if (dp[i][j] > result) result = dp[i][j];
            }
        }
        return result;
    }
};

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

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

相关文章

Rust X DatenLord l Rust China Conf 2023 倒计时!

Rust语言作为一种强调性能、安全和并发性的新的编程语言&#xff0c;吸引了越来越多的程序员想要尝试学习和使用Rust。达坦科技&#xff08;DatenLord&#xff09;旗下的开源项目Xline &#xff08;用于元数据管理的分布式KV存储&#xff09;就是用Rust写就的&#xff0c;我们也…

android remount 工作原理简介

android remount 在调试android 系统的时候是个非常有用的调试手段&#xff0c; 有remount 的帮助&#xff0c; 可以轻松的修改系统分区的某些文件&#xff0c;或者在系统分区添加删除文件。但有时候remount 也会因为一些verity&#xff0c; checkpoint &#xff0c;和remount …

【python数据可视化】Matplotlib绘图练习(一)

目录 Matplotlib &#x1f947;Summary 获取源码&#xff1f;私信&#xff1f;关注&#xff1f;点赞&#xff1f;收藏&#xff1f; Python数据可视化的由来主要是因为数据可视化在数据分析领域扮演了至关重要的角色。这是因为&#xff0c;数据可视化能够更好地向人们展示大量…

电脑老是自动更新怎么办?教你一招彻底解决

前言 这两天有粉丝留言问我&#xff1a;电脑老是提示自动更新&#xff0c;而且关也关不掉&#xff0c;这该怎么办&#xff1f; 今天就教大家如何彻底关掉电脑的系统自动更新功能&#xff0c;以后永远不再自动更新。 一、关闭更新服务 1. 同时按下键盘winR键&#xff0c;打开运…

SQL 知识你知道吗:公共表表达式(CTE)

一、概念 公共表表达式&#xff08;CTE&#xff09;是一种临时命名查询结果集的方式&#xff0c;可以在一个查询语句中多次引用。CTE在查询语句中定义&#xff0c;可以在查询语句中的任何位置使用&#xff0c;并且只在查询语句执行期间存在。CTE通常用于简化复杂的查询&#x…

1个暑假能学会多少网络安全技能?

现在可以看到很多标题都声称三个月内就可以转行网络安全领域&#xff0c;并且成为月入15K的网络工程师。那么&#xff0c;这个暑假的时间能学多少网络安全知识&#xff1f;是否能入门网络安全工程师呢&#xff1f; 答案是肯定的。 虽然网络完全知识是一门广泛的学科&#xff…

微信授权登录

网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统。 在进行微信OAuth2.0授权登录接入之前&#xff0c;在微信开放平台注册开发者帐号&#xff0c;并拥有一个已审核通过的网站应用&#xff0c;并获得相应的AppID和AppSecret&#xff0c;申请微信登录且通过…

ConcurrentHashMap简单了解

早期ConcurrentHashMap&#xff1a; 通过分段锁Segment实现&#xff0c;将锁一段一段存储&#xff0c;默认会分配16个segment&#xff0c;当一个线程占用一把锁segment访问其中一段数据的时候&#xff0c;位于其它segment的数据也能被其它线程同时访问&#xff0c;每个segment分…

面板安全能力持续增强,新增日志审计功能,1Panel开源面板v1.3.0发布

2023年6月12日&#xff0c;现代化、开源的Linux服务器运维管理面板1Panel正式发布v1.3.0版本。 在这一版本中&#xff0c;1Panel进一步增强了安全方面的能力&#xff0c;包括新增SSH配置管理、域名绑定和IP授权支持&#xff0c;以及启用网站防盗链功能。此外&#xff0c;该版本…

【C#】并行编程实战:序章

前言 本文主要是基于这本书学习的&#xff1a; 《并行编程实战&#xff1a;基于C#8和.NET Core 3》&#xff0c;我当时买的实体书&#xff0c;长下面这个样子。我买了大概浏览了一下&#xff0c;感觉内容还行&#xff08;基本都是没见过的新东西&#xff09;&#xff0c;所以打…

计算机提示由于找不到VCRUNTIME140.dll,无法继续执行代码,重新安装程序可能会解决

vcruntime140.dll文件是一个动态链接库&#xff0c;是Windows操作系统中非常重要的一个动态链接库文件&#xff0c;用于支持使用Microsoft Visual C编译器创建的应用程序的运行。当我们运行的软件是有C编译器创建的程序&#xff0c;就需要到系统的vcruntime140.dll&#xff0c;…

数学模型:Python实现微分方程

文章摘要&#xff1a;微分方程的Python实现。 参考书籍&#xff1a;数学建模算法与应用(第3版)司守奎 孙玺菁。 PS1&#xff1a;只涉及了具体实现并不涉及底层理论。没有给出底层理论参考书籍的原因是不想做这个方向吧。所以对我只要掌握基本模型有个概念那就好了。 PS2&#x…

年度创新企业奖!移远通信成推动AIoT融合落地关键力量

6月8日&#xff0c;由ASPENCORE主办的2023国际AIoT生态发展大会在深圳召开&#xff0c;移远通信受邀出席大会并发表演讲&#xff0c;同时凭借在5G、AIoT等领域的持续创新荣获“年度创新企业”奖&#xff01; 5GAIoT“双引擎” 重塑物联产业 近些年&#xff0c;从互联网、物联网…

汽车仪表中控开发中视频相关的一些知识点

前言: 做汽车仪表/IVI中控,尤其是IVI信息娱乐部分,都要涉及到视频这个知识点,各种概念很多,首先需要明确一条主线,那就是SDTV标清电视->HDTV高清电视->UHDTV超高清电视的一个发展脉络,BT601/656是SDTV标清电视接口,BT1120则对应HDTV高清电视接口。ITU-R BT.601/6…

2022 年全国硕士研究生入学统一考试管理类专业学位联考逻辑试题

2022 年全国硕士研究生入学统一考试管理类专业学位联考逻辑试题 一. 逻辑推理&#xff1a;第 26~55 小题&#xff0c;每小题 2 分&#xff0c;共 60 分。下列每题给出的 A、B、C、D、E 五个选项中&#xff0c;只有一项是符合试题要求的。 26.百年党史充分揭示了中国共产党为什么…

Qemu 逃逸基础知识

QEMU 与 KVM 架构 QEMU 与 KVM 的完整架构如下图所示。 QEMU 与 KVM 架构整体上分为 3 个部分&#xff1a; VMX root 模式的应用层&#xff0c;即图中左上部分&#xff0c;属于 qemu 进程。VMX root 模式的内核层&#xff0c;即图中下半部分&#xff0c;属于 kvm 驱动。VMX …

吴恩达471机器学习入门课程2第1周——手写数字识别(0和1)

用于手写数字识别的神经网络&#xff08;0和1&#xff09; 问题描述1.导入模块2. 数据集2.1 数据可视化 3 模型展示 使用神经网络来识别手写数字 0 和 1。 问题描述 在这个练习中&#xff0c;您将使用神经网络来识别手写数字“0”和“1”。这是一个二元分类任务。 自动手写数…

20JS11——JS对象

文章目录 一、对象二、创建对象的三种方式1、利用字面量创建对象1.1 使用对象1.2 变量、属性、函数、方法总结2、利用new Object创建对象3、利用构造函数创建对象&#xff08;1&#xff09;为什么使用构造函数&#xff1f;&#xff08;2&#xff09;利用构造函数创建对象&#…

Java8日期时间类LocalDateTime格式化

LocalDateTime日期时间格式化 LocalDateTime localDateTime LocalDateTime.now() System.out.println(now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")测…

000网络常见的资源推荐

博客 分类: 图解网络 | 小白debug有时骚话连篇&#xff0c;有时硬核图解https://xiaobaidebug.top/categories/%E5%9B%BE%E8%A7%A3%E7%BD%91%E7%BB%9C/网络攻击常见手段总结 | JavaGuide(Java面试 学习指南)本文整理完善自TCP/IP 常见攻击手段 - 暖蓝笔记 - 2021这篇文章。 这…