( 动态规划) 674. 最长连续递增序列 / 718. 最长重复子数组——【Leetcode每日一题】

news2024/11/23 12:45:46

题目一(贪心)

❓674. 最长连续递增序列

难度:简单

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

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

示例 1:

输入:nums = [1,3,5,4,7]
输出:3
解释:最长连续递增序列是 [1,3,5], 长度为3。
尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为 5 和 7 在原数组里被 4 隔开。

示例 2:

输入:nums = [2,2,2,2,2]
输出:1
解释:最长连续递增序列是 [2], 长度为1。

提示:

  • 1 < = n u m s . l e n g t h < = 1 0 4 1 <= nums.length <= 10^4 1<=nums.length<=104
  • − 1 0 9 < = n u m s [ i ] < = 1 0 9 -10^9 <= nums[i] <= 10^9 109<=nums[i]<=109

💡思路:贪心

这道题目可以用贪心来做:

  • 遇到 nums[i] > nums[i - 1] 的情况,count++
  • 否则count1,使用ans保存count最大值

🍁代码:(Java、C++)

Java

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

C++

class Solution {
public:
    int findLengthOfLCIS(vector<int>& nums) {
        int ans = 1, count = 1;;
        for(int i = 1; i < nums.size(); i++){
            if(nums[i] > nums[i - 1]) count++;
            else{
                ans = max(ans, count);
                count = 1;
            }
        }
        ans = max(ans, count);
        return ans;
    }
};

🚀 运行结果:

在这里插入图片描述

🕔 复杂度分析:

  • 时间复杂度 O ( n ) O(n) O(n),其中 n 为数组nums的长度,要遍历数组一次。
  • 空间复杂度 O ( 1 ) O(1) O(1),额外使用的空间为常数。

题目来源:力扣。

题目二(背包问题)

❓718. 最长重复子数组

难度:中等

给两个整数数组 nums1nums2 ,返回 两个数组中 公共的 、长度最长的子数组的长度 。

示例 1:

输入:nums1 = [1,2,3,2,1], nums2 = [3,2,1,4,7]
输出:3
解释:长度最长的公共子数组是 [3,2,1] 。

示例 2:

输入:nums1 = [0,0,0,0,0], nums2 = [0,0,0,0,0]
输出:5

提示:

  • 1 <= nums1.length, nums2.length <= 1000
  • 0 <= nums1[i], nums2[i] <= 100

💡思路:

背包问题必知内容:一篇文章吃透背包问题!!!

我们可以设置一个二维dp数组,dp[i][j] 表示nums1的前i个数字 和 nums2的前j个数字 的最长重复子数组长度:

  • 如果nums1[i] == nums2[j]则此时的最长长度等于 dp[i][j] = dp[i-1][j-1] + 1
  • 如果不相等,dp[i][j] = 0

在这里插入图片描述

🍁代码:(Java、C++)

Java

class Solution {
    public int findLength(int[] nums1, int[] nums2) {
        int[] dp = new int[nums2.length + 1];//dp[i]数组存储
        int ans = 0;
        for(int i = 0; i < nums1.length; i++){
            for(int j = nums2.length - 1; j >= 0; j--){
                if(nums1[i] == nums2[j]){
                    dp[j + 1] = 1 + dp[j];
                    ans = Math.max(ans, dp[j + 1]);
                } 
                else dp[j + 1] = 0;
            }
        }
        return ans;
    }
}

C++

class Solution {
public:
    int findLength(vector<int>& nums1, vector<int>& nums2) {
        vector<int> dp(nums2.size() + 1);//dp[i]数组存储
        int ans = 0;
        for(int i = 0; i < nums1.size(); i++){
            for(int j = nums2.size() - 1; j >= 0; j--){
                if(nums1[i] == nums2[j]){
                    dp[j + 1] = 1 + dp[j];
                    ans = max(ans, dp[j + 1]);
                } 
                else dp[j + 1] = 0;
            }
        }
        return ans;
    }
};

🚀 运行结果:

在这里插入图片描述

🕔 复杂度分析:

  • 时间复杂度 O ( n ∗ m ) O(n*m) O(nm),其中 n 为数组nums1的长度,m 为数组nums2的长度。
  • 空间复杂度 O ( m ) O(m) O(m)

题目来源:力扣。

放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我LeetCode主页 / CSDN —— 力扣专栏,每日更新!

注: 如有不足,欢迎指正!

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

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

相关文章

vcruntime140.dll如何修复?这个修复方法很简单,适合电脑小白

今天打开photoshop软件工作的时候&#xff0c;突然间就打不开&#xff0c;电脑报错由于找不到vcruntime140.dll&#xff0c;无法继续执行此代码&#xff0c;然后我就把photoshop卸载了&#xff0c;再重新安装&#xff0c;依然还是报错。这个可怎么办&#xff1f;vcruntime140.d…

CentOS 安装MongoDB 6.0

一、安装依赖 yum install libcurl openssl xz-libs 二、下载安装包 安装包下载地址https://www.mongodb.com/try/download/community这里我选择的是 选择RedHat / CentOS 7.0平台的原因是我的操作系统使用的是CentOS 7.0的&#xff0c;需要下载与操作系统匹配的安装包 三、…

ChatGPT插件权限给Plus用户放开了

大家好&#xff0c;我是章北海mlpy ChatGPT插件权限给Plus用户放开了 我稍微测试了俩&#xff0c;感觉还行&#xff0c;后续我会对一些热门插件深入测测&#xff0c;敬请期待。 官方对插件的介绍如下&#xff1a; 1、插件由非由OpenAI控制的第三方应用程序提供动力。在安装…

Spring Cloud Alibaba-Sentinel熔断降级

Sentinel: 轻量级的流量控制、熔断降级Java库&#xff0c; 分布式系统的流量防卫兵。 文章目录 一、Sentinel 是什么&#xff1f;二、安装Sentinel控制台三、Sentinel 实战3.1、准备工作3.2、流控规则快速失败Warm Up匀速排队 3.3、热点key限流3.4、降级规则3.5、系统规则 四、…

自定义组件3-behaviors

1、behaviors是小程序中用于实现组件间代码共享的特性&#xff0c;类似于Vue.js中的mixins 2、behaviors的工作方式 每个behaviors可以包含一组属性、数据、生命周期函数和方法。组件引用它时&#xff0c;它的数据和属性和方法会被 合并到组件中。 每个组件可以引用多个behav…

Python采集知某专栏文章保存成pdf

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 环境使用: Python 3.8 Pycharm wkhtmltopdf 软件 文末名片获取 模块使用: requests >>> pip install requests 数据请求 parsel >>> pip install parsel 数据解析 re >>> 内置模块 不…

【年度最强超级Ai让你体验真正的人工智能】

年度最强超级Ai让你体验真正的人工智能&#xff08;破解版&#xff09; 登录就是永久会员&#xff08;先上链接&#xff0c;资源来源于网络&#xff0c;如有侵权&#xff0c;联系删除&#xff09; 网易邮箱&#xff1a; 23402001163163.com 我用蓝奏浏览器分享了[GPT-AI助手V1…

100 个 Go 错误以及如何避免:5~8

协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【OpenDocCN 饱和式翻译计划】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 真相一旦入眼&#xff0c;你就再也无法视而不见。——《黑客帝国》 五、字符串 本章涵盖 理解GO中…

Oracle执行计划管理 - SPM

https://blog.51cto.com/lhrbest/3246884 目录 Oracle优化器辅助手段的发展 SPM需求背景 SPM重要构成 SQL计划基准捕获 如何创建SQL计划基准 如何查看SQL计划基准 SQL计划基准选择 执行计划的三个属性 如何选择SQL计划 SQL计划基准发展 SQL计划基准发展的三种选择 …

在外包干了三年,我废了……不吹不黑!

没错&#xff0c;我也干过外包&#xff0c;一干就是三年&#xff0c;三年后&#xff0c;我废了…… 虽说废的不是很彻底&#xff0c;但那三年我几乎是出差了三年、玩了三年、荒废了三年&#xff0c;那三年&#xff0c;我的技术能力几乎是零成长的。 说起这段三年的外包经历&a…

CTFShow-电子取证篇Writeup

CTFShow-电子取证篇Writeup 套的签到题&#xff1a;JiaJia-CP-1&#xff1a;JiaJia-CP-2&#xff1a;JiaJia-CP-3&#xff1a; CTFShow 平台&#xff1a;https://ctf.show/ 套的签到题&#xff1a; JiaJia-CP-1&#xff1a; 这是部分人熟知的刘佳佳同学的电脑&#xff0c;她…

JavaWeb-Servlet的学习

Servlet 简介 Servlet是JavaWeb最为核心的内容&#xff0c;它是Java提供的一门动态web资源开发技术。 使用Servlet就可以实现&#xff0c;根据不同的登录用户在页面上动态显示不同内容。 Servlet是JavaEE规范之一&#xff0c;其实就是一个接口&#xff0c;将来我们需要定义S…

SpringBoot 整合 ES 进行各种高级查询搜索

数据准备 因为本文都是数据的搜索&#xff0c;所以我们需要在我们的es服务器里先插入一些数据以供我们后面使用 esUserService public interface EsUserService extends ElasticsearchRepository<User, Integer> {}RestController public class EsController {Autowir…

HUSTOJ中添加初赛练习系统

文章目录 0. 基于hustoj二开的初赛练习系统&#xff0c;QQ4705852261. 主界面2. 练习界面3. 模拟考试界面4. 查看试卷回放5. 后台操作界面6. 后台试题分类-列表7.后台试题-列表8. 后台试题-添加9. 后台试卷结构-设置 0. 基于hustoj二开的初赛练习系统&#xff0c;QQ470585226 …

Requests请求库的使用

Request请求库 爬虫运行原理Requests请求库安装环境 Requests库的使用状态码网页内容 爬虫运行原理 首先回顾一下爬虫运作的基本原理&#xff08;下面是比较正式的书面语&#xff09;&#xff1a; 爬虫是一种自动化程序&#xff0c;用于从互联网上获取信息&#xff0c; 发起请…

蓝牙耳机啥牌子好?发烧友力荐五大超高性价比蓝牙耳机

预算有限的情况下&#xff0c;性价比是我们在购物时的主要衡量维度&#xff0c;挑选蓝牙耳机时也不例外&#xff0c;那么你知道哪些蓝牙耳机性价比最高吗&#xff1f;不懂的话可以看看老烧我整理的超高性价比蓝牙耳机推荐&#xff0c;了解蓝牙耳机啥牌子好。 一、JEET Air 2 蓝…

数据结构总结4:树、二叉树

后续会有补充 树 树是一种非线性的数据结构&#xff0c;是由n(n>0)个有限结点组成一个具有层次关系的集合。 1.有一个特殊的结点&#xff0c;称为根结点&#xff0c;根节点没有前驱结点 2.树是递归定义的 满足树的条件&#xff1a; 1.子树不相交 2.除了根结点外&#xff0…

白盒测试:如何进行代码级别的测试?

01、什么是白盒测试 白盒测试也称结构测试&#xff0c;透明盒测试。主要用于单元测试阶段&#xff0c;代码和逻辑的测试&#xff0c;重点复杂的测试&#xff0c;是一种测试用例设计方法&#xff0c;不同于黑盒测试&#xff0c;白盒测试是可以看到内部代码如何运作的&#xff0…

PDF.js实现按需加载pdf文件-包含前后端开发源码和详细开发教程

PDF.js实现按需加载pdf文件 说明前言前端项目分片加载的效果前端项目结构项目运行与访问 后端项目项目结构核心代码实现注意事项 项目源码 说明 本文主要是介绍pdf.js的前后端项目的实现&#xff0c;包含可直接运行的源码。由于本人偏向于后端开发&#xff0c;因此前端的vue方…

学习C这么久了,main函数的这三个参数你见过吗?

文章目录 &#x1f490;专栏导读&#x1f490;文章导读&#x1f427;引例1&#x1f427;引例2 &#x1f426;认识环境变量&#x1f514;环境变量的概念&#x1f514;常见的环境变量&#x1f514;和环境变量相关的指令 &#x1f426;main函数的第三个参数&#x1f514;如何通过代…