数据结构与算法之动态规划: LeetCode 674. 最长连续递增序列 (Ts版)

最长连续递增序列

  • https://leetcode.cn/problems/longest-continuous-increasing-subsequence/description/

描述

  • 给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度
  • 连续递增的子序列 可以由两个下标 l 和 r(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 <= nums.length <= 1 0 4 10^4 104
  • - 1 0 9 10^9 109 <= nums[i] <= 1 0 9 10^9 109

Typescript 版算法实现


1 ) 方案1: 贪心

function findLengthOfLCIS(nums: number[]): number {const n = nums.length;if (n <= 1) return n;let start = 0;let ans = 0;for (let i = 0; i < n; i++) {if (i > 0 && nums[i] <= nums[i - 1]) {start = i;}ans = Math.max(ans, i - start + 1);}return ans;
};

2 ) 方案2: 贪心变体

function findLengthOfLCIS(nums: number[]): number {const n = nums.length;if (n <= 1) return n;let count = 1;let ans = 1;for (let i = 0; i < n - 1; i++) {nums[i + 1] > nums[i] ? count ++ : (count = 1);ans = Math.max(ans, count);}return ans;
};

3 ) 方案3: 动态规划

function findLengthOfLCIS(nums: number[]): number {// 获取长度const n = nums.length;if (n <= 1) return n;// 定义记录结果的变量let count: number = 0;// 定义dp数组并初始化为1let dp: number[] = new Array(n).fill(1);// 遍历for (let i = 1; i < n; i++) {if (nums[i - 1] < nums[i]) {// 状态转移方程: 不连续递增子序列的跟前 0-i 个状态有关,连续递增的子序列只跟前一个状态有关dp[i] = dp[i - 1] + 1;}// 记录dp数组中的最大值if (count < dp[i]) count = dp[i];}return count;
}

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

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

相关文章

SqlSession的线程安全问题源码分析

&#x1f3ae; 作者主页&#xff1a;点击 &#x1f381; 完整专栏和代码&#xff1a;点击 &#x1f3e1; 博客主页&#xff1a;点击 文章目录 SqlSession 是线程安全的吗&#xff1f;为什么说是线程不安全的&#xff1f;事务管理问题 数据库连接的共享问题 一级缓存线程安全问题…

Unity Mesh生成Cube

1. 配置一个Cube的每个面的数据 一共是6个面&#xff0c;每个面包含的数据包括4个顶点的相对顶点坐标&#xff08;Cube的中心为原点&#xff09;&#xff0c;法线方向&#xff0c;UV坐标&#xff0c;顶点渲染顺序&#xff0c;以及这个面用到的材质&#xff0c;因为这里是Top&am…

小程序组件 —— 22 组件案例 - 轮播区域绘制

这一节我们实现轮播图最外层的盒子&#xff0c;也就是把轮播图的最外层搭好&#xff0c;先不给轮播图添加图片&#xff0c;因为图片属于新的组件&#xff0c;组件里面有一些知识点&#xff0c;需要单独分开讲&#xff1b; 回顾一下&#xff0c;在进行传统网页开发时&#xff0…

【文献精读笔记】Explainability for Large Language Models: A Survey (大语言模型的可解释性综述)(二)

****非斜体正文为原文献内容&#xff08;也包含笔者的补充&#xff09;&#xff0c;灰色块中是对文章细节的进一步详细解释&#xff01; 3.1.2 基于注意力的解释&#xff08;Attention-Based Explanation&#xff09; 注意力机制可以揭示输入数据中各个部分之间的关系&#…

【centos8 镜像修改】centos8 镜像修改阿里云

要将 CentOS 8 的镜像源修改为阿里云镜像&#xff0c;你需要编辑 /etc/yum.repos.d/ 目录下的 .repo 文件。以下是具体的步骤&#xff1a; 备份原始的 .repo 文件&#xff1a; 在编辑之前&#xff0c;建议备份原始的 .repo 文件&#xff0c;以便在出现问题时可以恢复。 sudo cp…

git reset --hard(重置到当前提交,所有未提交的更改都会被永久丢弃)

git reset --hard 是一个强大的命令&#xff0c;它会将你的工作目录、暂存区和当前分支的 HEAD 指针重置到指定的提交状态&#xff0c;所有未提交的更改都会被永久丢弃。因此&#xff0c;使用这个命令时需要非常小心。 基本用法 重置到当前提交&#xff08;丢弃所有未提交的更…

WebRTC的三大线程

WebRTC中的三个主要线程&#xff1a; signaling_thread&#xff0c;信号线程&#xff1a;用于与应用层交互worker_thread&#xff0c;工作线程&#xff08;最核心&#xff09;&#xff1a;负责内部逻辑处理network_thread&#xff0c;网络线程&#xff1a;负责网络数据包的收发…

25考研总结

11408确实难&#xff0c;25英一直接单科斩杀&#x1f62d; 对过去这一年多备考的经历进行复盘&#xff0c;以及考试期间出现的问题进行思考。 考408的人&#xff0c;政治英语都不能拖到最后&#xff0c;408会惩罚每一个偷懒的人&#xff01; 政治 之所以把政治写在最开始&am…

linux ext4文件系统

Ext4&#xff08;第四扩展文件系统&#xff0c;简称为 EXT4&#xff09;是Linux操作系统中广泛使用的日志文件系统。它是Ext3文件系统的后继者&#xff0c;提供了更多的特性和改进&#xff0c;以适应更大的存储设备和更复杂的文件系统操作。以下是Ext4文件系统的一些主要特点&a…

Singleton: WebRTC中ThreadManager中的单例模式

1. 什么是单例模式&#xff1a; 旨在确保一个类只有一个实例&#xff0c;并提供全局访问点。 应用场景&#xff1a;需要一个全局唯一的实例&#xff0c;避免资源浪费。 2. 单例模式的实现&#xff1a; Lazy Initialization&#xff08;懒汉式&#xff09;&#xff08;延迟初…

人工智能:变革时代的核心驱动力

求各位观众老爷看一看 先声明一下&#xff0c;该内容由于篇幅过长&#xff0c;可能会有一些地方存在一些小问题请大家谅解 观众老爷们&#xff0c;点个免费的赞和关注呗&#xff0c;您们的支持就是我最大的动力~ 人工智能&#xff1a;变革时代的核心驱动力 一、引言 在当今…

单元测试入门和mockup

Java 新手入门&#xff1a;Java单元测试利器&#xff0c;Mock详解_java mock-CSDN博客 这个是典型的before when assert三段式&#xff0c;学一下单测思路 这个没有动态代理&#xff0c;所以是直接class(对比下面) Jmockit使用笔记_增加代码覆盖率_覆盖try catch_使用new Mock…

数组方法 | vue修改数组

数组方法 修改原数组 push() 方法&#xff08;在数组结尾处&#xff09;向数组添加一个新的元素 var list["数学","历史"]; list.push("英语"); ["数学","历史","英语"]unshift() 方法&#xff08;在开头&…

智能化人才招聘系统是怎样的?

随着企业规模的扩大和业务范围的拓展&#xff0c;人才招聘成为了企业发展的关键环节。然而&#xff0c;市面上的人才招聘系统琳琅满目&#xff0c;质量参差不齐&#xff0c;许多企业发现&#xff0c;并非所有系统都能满足他们的需求&#xff0c;特别是智能化的需求。今天&#…

MongoDB 固定集合

MongoDB 固定集合 MongoDB中的固定集合&#xff08;Capped Collections&#xff09;是一种具有固定大小的集合&#xff0c;当集合中的数据达到其最大大小时&#xff0c;它会自动覆盖最早的文档。这种类型的集合在MongoDB中用于实现高效的、固定大小的循环缓冲区。本文将详细介…

SpringBoot 实现登录功能

目录 下发JWT 令牌依赖文件令牌生成令牌验证 统一验证技术过滤器 Filter快速使用实现登录校验 拦截器 Interceptor快速使用实现登录校验 下发JWT 令牌 全称: JSON Web Token 官网&#xff1a; https://jwt.io/ 以JSON 的数据格式安全传输信息&#xff0c;利用 base64 进行编…

PHP关键字Self、Static和parent的区别

简介 在使用PHP代码时&#xff0c;您可能经常会遇到parent::、static::和self::。但是当你第一次作为一个开发人员开始的时候&#xff0c;有时候你会很困惑&#xff0c;不知道它们是做什么的&#xff0c;以及它们之间的区别。 在我第一次作为开发人员开始工作后的很长一段时间…

Disruptor 有哪些典型的使用场景?

大家好&#xff0c;我是君哥。 Disruptor 是一款高性能的内存有界队列&#xff0c;它通过内存预分配、无锁并发、解决伪共享问题、使用 RingBuffer 取代阻塞队列等措施来大幅提升队列性能。 但开发者们往往对它的使用场景不太了解&#xff0c;到底应该在哪些场景使用呢&#…

[MySQL报错]关于发生net start mysql 服务无法启动,服务没有报告任何错误的五种解决方案。

咋直接进入主题。 我遇到的问题是net start mysql 服务无法启动&#xff0c;服务没有报告任何错误 其问题出在哪里呢 一.ini文件配置问题 在于你没有给你下载好的mysql文件中配置.ini文件。 该如何配置呢。那就是先在文件夹中创建一个文本文件&#xff0c;把下面内容复制进去…

HTML5新特性|01 音频视频

音频 1、Audio (音频) HTML5提供了播放音频文件的标准 2、control(控制器) control 属性供添加播放、暂停和音量控件 3、标签: <audio> 定义声音 <source> 规定多媒体资源,可以是多个<!DOCTYPE html> <html lang"en"> <head><…