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

本文主要是介绍LeetCode刷题 | Day 2 最长严格递增或递减子列表(Longest Increasing or Decreasing SubList),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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:第一次刷到的道友留步,这里拉齐一下信息。文章主要记录视频中的主要内容,算法思路会按照个人理解,用伪代码+举例每步输出的方式呈现。代码部分会以Python和C++语法进行呈现。文章最后会总结一些英语词汇。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

这篇关于LeetCode刷题 | Day 2 最长严格递增或递减子列表(Longest Increasing or Decreasing SubList)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1030493

相关文章

Python中DataFrame转列表的最全指南

《Python中DataFrame转列表的最全指南》在Python数据分析中,Pandas的DataFrame是最常用的数据结构之一,本文将为你详解5种主流DataFrame转换为列表的方法,大家可以... 目录引言一、基础转换方法解析1. tolist()直接转换法2. values.tolist()矩阵

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

python展开嵌套列表的多种方法

《python展开嵌套列表的多种方法》本文主要介绍了python展开嵌套列表的多种方法,包括for循环、列表推导式和sum函数三种方法,具有一定的参考价值,感兴趣的可以了解一下... 目录一、嵌套列表格式二、嵌套列表展开方法(一)for循环(1)for循环+append()(2)for循环+pyPhWiFd

Python容器类型之列表/字典/元组/集合方式

《Python容器类型之列表/字典/元组/集合方式》:本文主要介绍Python容器类型之列表/字典/元组/集合方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 列表(List) - 有序可变序列1.1 基本特性1.2 核心操作1.3 应用场景2. 字典(D

Java中数组转换为列表的两种实现方式(超简单)

《Java中数组转换为列表的两种实现方式(超简单)》本文介绍了在Java中将数组转换为列表的两种常见方法使用Arrays.asList和Java8的StreamAPI,Arrays.asList方法简... 目录1. 使用Java Collections框架(Arrays.asList)1.1 示例代码1.

python中列表list切分的实现

《python中列表list切分的实现》列表是Python中最常用的数据结构之一,经常需要对列表进行切分操作,本文主要介绍了python中列表list切分的实现,文中通过示例代码介绍的非常详细,对大家... 目录一、列表切片的基本用法1.1 基本切片操作1.2 切片的负索引1.3 切片的省略二、列表切分的高

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

关于最长递增子序列问题概述

《关于最长递增子序列问题概述》本文详细介绍了最长递增子序列问题的定义及两种优化解法:贪心+二分查找和动态规划+状态压缩,贪心+二分查找时间复杂度为O(nlogn),通过维护一个有序的“尾巴”数组来高效... 一、最长递增子序列问题概述1. 问题定义给定一个整数序列,例如 nums = [10, 9, 2

Redis存储的列表分页和检索的实现方法

《Redis存储的列表分页和检索的实现方法》在Redis中,列表(List)是一种有序的数据结构,通常用于存储一系列元素,由于列表是有序的,可以通过索引来访问元素,因此可以很方便地实现分页和检索功能,... 目录一、Redis 列表的基本操作二、分页实现三、检索实现3.1 方法 1:客户端过滤3.2 方法