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

力扣300:最长递增子序列

力扣300:最长递增子序列

  • 题目
  • 思路
  • 代码

题目

给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。

子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。

思路

想要得到最长的递增子序列长度我们必须先能判断递增子序列,这道题没有严格要求是连续的子序列反而是让难度更高了,想要得到递增的子序列我们首先要判断这个位置前面是否有比它还小的值,如果有子序列的长度就可以在原本的基础上进行+1了。但是一个数组的子序列有很多我们应该在哪个子序列原本的基础上对长度进行++呢?这就要引入题目的另外一个条件了最长递增子序列,所以我们可以构造一个新数组长度和原数组相同,新数组中每个位置存储着原数组以该位置为结尾的最长递增子序列的长度。当我们遇到一个新位置时我们就遍历其前面的所有位置如果有位置的值小于当前值我们就通过判断来得到当前位置的最长递归子序列的长度。判断条件就是取当前位置在新数组的值以及前置位置在新数组的值+1中的最大值,也就是我们假设当前位置为i,前置位置为j,新数组为newnums。那么判断条件就是newnums[i] = max(newnums[i],newnums[j]+1)。我们再定义一个变量来得到循环中的newnums[i]的最大值即可。
我们在这题使用的思想是动态规划,我们可以发现新数组的每个位置的都是等于记住了以当前位置为结尾时的答案也就是最长递增子序列的长度。所有动态规划的思想就是构建一个新数组,这个数组里存储的值就是以当前位置为结尾时的答案,再通过状态转换方程来得到下一个位置的答案以此类推。

代码

http://www.lryc.cn/news/613374.html

相关文章:

  • 优选算法 力扣 LCR 179. 查找总价格为目标值的两个商品 双指针降低时间复杂度 C++题解 每日一题
  • Cesium粒子系统模拟风场动态效果
  • 【Zephyr】02_从零教你开发芯片级ADC驱动(HAL层篇)
  • 第三章:【springboot】框架介绍MyBatis
  • 恒虚警检测(CFAR)仿真:杂波边缘与多目标场景分析
  • 在新建word中使用以前文件中的列表样式
  • java中override和overload的区别
  • Java 大视界 -- Java 大数据在智能安防门禁系统中的人员行为分析与异常事件预警(385)
  • AR技术:制造业质量控制的“智能革新”
  • Redis最新安装教程(WindowsLinux)
  • Kubernetes(k8s)之Service服务
  • SpringBoot的优缺点
  • 【更新被拒绝,因为推送的一个分支的最新提交落后于其对应的远程分支。】
  • VLMEvalKit使用记录
  • 公开致歉声明
  • P1690 贪婪的 Copy
  • idea工具maven下载报错:PKIX path building failed,配置忽略SSL检查
  • 量子计算入门 | 量子力学的发展
  • 如何将普通HTTP API接口改造为MCP服务器
  • list类
  • SQL注入攻击基础
  • Cookie和Session是什么?有什么区别?
  • 如何开发一个运行在windows系统服务器上的服务
  • 跨学科视域下的深层语义分析与人类底层逻辑一致性探索
  • 性能优化——GPU的影响
  • 基于Matlab图像处理的黄豆自动计数系统设计与实现
  • sklearn study notes[3]
  • Nuxt.js 国际化配置完整教程(含版本兼容与问题解决)
  • 驱动-设备树插件注册子系统
  • 【Bluedroid】蓝牙音频接收端活动设备切换机制深度解析(sink_set_active_device)