当前位置: 首页 > news >正文

数据结构与算法之动态规划: 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.mrgr.cn/news/82028.html

相关文章:

  • 【AI部署】腾讯云每月1w小时免费GPU获取
  • QT集成IntelRealSense双目摄像头3,3D显示
  • JS-判断字段值是否为空
  • ubuntu常用快捷键和变量记录
  • Ubuntu 22.04 升级 24.04 问题记录
  • Linux总结之CentOS Stream 9安装mysql8.0实操安装成功记录
  • 配置中心 之 apollo
  • Postman[8] 断言
  • python文件操作相关(excel)
  • SpringJPA使用崩溃了
  • Web安全 - “Referrer Policy“ Security 头值不安全
  • RK3568 bsp 9 - USB调试记录
  • 深度学习blog- 数学基础(全是数学)
  • C++类与对象(三)-- 再谈构造函数(细嗦初始化列表)、static成员
  • 《机器学习》从入门到实战——逻辑回归
  • 机器学习之逻辑回归算法、数据标准化处理及数据预测和数据的分类结果报告
  • JDK 21 的重要特性
  • Java方法使用详解:从基本概念到进阶技巧
  • 一个响应式的系统 具有黑白俩个主题
  • 学习vue3的笔记
  • Vue 中el-table-column 进行循环,页面没渲染成功
  • 基本算法——聚类
  • Android原生Widget使用步骤
  • Unity开发AR之Vuforia-MultiTarget笔记
  • 在React中引入tailwind css(图文详解)
  • 刷机TP-Link tp-link-WDR5660