LeetCode刷题 | Day 2 最长严格递增或递减子列表(Longest Increasing or Decreasing SubList)

server/2024/10/19 6:23:58/

LeetCode刷题 | Day 2 最长严格递增或递减子列表(Longest Increasing Decreasing SubList)


文章目录

  • LeetCode刷题 | Day 2 最长严格递增或递减子列表(Longest Increasing Decreasing SubList)
  • 前言
  • 一、题目概述
  • 二、解题方法
    • 2.1 动态规划思想
      • 2.1.1 思路讲解
      • 2.1.2 伪代码 + 逐步输出示例
      • 2.1.3 Python代码如下
      • 2.1.4 C++代码如下
  • 三、英语词汇


前言

LeetCode位置:3105. 最长的严格递增或递减子数组

日常刷题,维持手感,同步学习英语,刷题顺序参考B站UP@justyyuk的系列视频,感兴趣的点波关注。
学海无涯,大路千万,感恩此程,彼此真诚陪伴!
在这里插入图片描述
Ps:第一次刷到的道友留步,这里拉齐一下信息。文章主要记录视频中的主要内容,算法思路会按照个人理解,用伪代码+举例每步输出的方式呈现。代码部分会以PythonC++语法进行呈现。文章最后会总结一些英语词汇。OK,就啰嗦这么多,开始进步[干杯🐱‍👓]


一、题目概述

本题与UP主justyyuk的题目不同(UP主题目:最长严格递增然后递减子列表),但解题思路类似(最后一步不同),故这里以LeetCode为主。
Day2题目

输入:nums列表
输出:最长严格递增然后递减子列表长度

PS:

  1. 子序列 (Subsequence):

    • 子序列是通过从原始序列中删除一些或不删除任何元素且不改变剩余元素顺序而得到的序列。
    • 例子:对于序列 [1, 2, 3, 4],[1, 3, 4] 和 [2, 4] 是子序列。
    • 注意:[1, 4, 3] 不是 子序列,因为顺序改变了。
  2. 子列表 (Sublist)

    • 子列表是列表的连续部分,意味着元素必须是连续的。
    • 例子:对于列表 [1, 2, 3, 4],[2, 3] 和 [1, 2, 3]是子列表。
    • 注意:[1, 3] 不是 子列表,因为它不是连续的。
  3. 子数组 (Subarray):

    • 类似于子列表,子数组是数组的连续部分。
    • 例子:对于数组 [1, 2, 3, 4],[2, 3] 和 [1, 2, 3] 是子数组。
    • 注意:[1, 3] 不是 子数组,因为它不是连续的。
  • 在许多情况下,当数据结构是数组或列表时,“子列表”和“子数组”可以互换使用,但“子数组”一词专门用于数组。

二、解题方法

2.1 动态规划思想

2.1.1 思路讲解

Ps: 动态规划(Dynamic Programming)特征
- 最优子结构:
- 动态规划要求问题具有最优子结构性质,即问题的最优解包含其子问题的最优解。
- 重叠子问题:
- 动态规划需要问题具有重叠子问题性质,即不同的子问题在求解时会重复出现。
- 状态转移方程:
- 动态规划通过状态转移方程将问题分解为子问题,并通过子问题的解来推导原问题的解。
- 全局最优解:
- 动态规划通过考察所有可能的子问题组合来确保找到全局最优解。
- 记忆化或表格法:
- 动态规划通常使用记忆化搜索或自底向上的表格法来避免重复计算。

  • 动态规划策略

    • 分别计算数组中每个位置的单调递增和单调递减子数组的长度,最终得到最长单调子数组的长度。
  • 具体步骤

    • 使用两个数组 inc 和 dec,分别存储每个位置上最长单调递增和单调递减子数组的长度,初始值均为 1。
    • 从前往后遍历 nums 数组,若当前元素大于前一个元素,则当前位置的递增长度等于前一个位置的递增长度加一。
    • 从后往前遍历 nums 数组,若当前元素大于后一个元素,则当前位置的递减长度等于后一个位置的递减长度加一。
    • 最终结果为 inc 和 dec 两个数组中的最大值,即最长的单调子数组长度。

2.1.2 伪代码 + 逐步输出示例

# 伪代码示例
函数 longestMonotonicSubarray(nums):n = nums 的长度初始化 inc 数组为 [1] * n初始化 dec 数组为 [1] * n对于 i 从 1 到 n-1:如果 nums[i] > nums[i-1]:inc[i] = inc[i-1] + 1对于 i 从 n-20:如果 nums[i] > nums[i+1]:dec[i] = dec[i+1] + 1ans = inc 和 dec 数组中的最大值返回 ans# 逐步输出示例
输入: nums = [1, 2, 2, 3, 2, 1, 4]
步骤:
1. n = 7
2. 初始化 inc 数组为 [1, 1, 1, 1, 1, 1, 1]
3. 初始化 dec 数组为 [1, 1, 1, 1, 1, 1

http://www.ppmy.cn/server/47666.html

相关文章

云计算-高级云资源配置(Advanced Cloud Provisioning)

向Bucket添加公共访问(Adding Public Access to Bucket) 在模块5中,我们已经看到如何使用CloudFormation创建和更新一个Bucket。现在我们将进一步更新该Bucket,添加公共访问权限。我们在模块5中使用的模板(third_templ…

Jenkins常用插件与应用详解

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 Jenkins是一个平台我们通过安装插件来解决我们想要完成的任务 1、Jenkins常用插件 Allure&#…

竹纤维家装元宇宙:虚拟空间与绿色生活的融合

在全球化和科技迅速发展的今天,元宇宙作为一种全新的互联网应用和社会形态,正逐步渗透到人们生活的各个方面。特别是在家装行业,竹纤维作为一种新型环保材料,结合元宇宙的概念,正在引领一场绿色生活的革命。 ### 一、…

JavaSE——【逻辑控制】(知识)

目录 前言 一、顺序结构 二、分支结构 三、循环结构 总结 前言 公元 3050 年,地球的科技已经发展到令人难以想象的地步。这天,艾米莉在自己的房间里启动了最新的虚拟旅行装置,下一秒,她发现小奥奇的博客更新了。立即放弃了虚…

实验名称:函数练习2

你是蛤蟆秧子跟着甲鱼转,装王八孙子。这是我今天听到最牛逼的一句话。 目录 一、实验目的 二、实验环境 三、实验步骤 四、实验结果 1.系统的增删改等都需要先登录后才能操作。 编写装饰器用于登录验证,再对增删改进行装饰,测试登录验证装饰器是…

Vue Router源码分析

摘要&#xff1a;最近项目中遇到了点Vue Router的问题&#xff0c;发现有些只是没理清楚&#xff0c;再次复习了下Vue Router的源码&#xff0c;记录下... Vue-Router的能力十分强大&#xff0c;它支持hash、history、abstract 3种路由方式&#xff0c;提供了<router-link&g…

概率分布、回归分析、假设检验……用 DolphinDB 函数库快速实现概率统计分析

在金融和物联网等领域&#xff0c;概率统计与分析扮演着至关重要的角色。DolphinDB 作为一款强大的时序数据库&#xff0c;提供了一系列内置的概率统计与分析函数&#xff0c;能够满足用户的各种需求。 金融领域 风险管理&#xff1a;通过概率统计分析&#xff0c;金融机构可…

表 ,索引的 degree 检查, trim(degree) default INSTANCES

检查degree >1 的 select substr(owner,1,15) Owner , ltrim(degree) Degree, ltrim(instances) Instances, count(*) "Num Tables" , Parallel from dba_tables where ( trim(degree) > 1 ) and table_name not like ET$% group by owner, degree , ins…