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

力扣300. 最长递增子序列(动态规划)

Problem: 300. 最长递增子序列

文章目录

  • 题目描述
  • 思路及解法
  • 复杂度
  • Code

题目描述

在这里插入图片描述

思路及解法

明确题目涉及到求取最值问题因此我们可以考虑使用动态规划来解决问题

1.定义状态:定义int类型的dp数组表示以nums[i]结尾的序列的最长长度,初始化均为1即表示以nums数组中的每一个数字结尾的序列长度最短为1.
2.状态转移:假设现在已经得出dp[i-1]的长度,再进一步求取dp[i]:此时我么和从数组nums[0 ~ j] 其中(j < i)寻找,若nums[i] < nums[i]dp[i] = max(dp[i], dp[j] + 1),因为根据上述dp数组的状态定义dp[j]是表示以nums[j]结尾的最长递增子序列,此时nums[j] < nums[i]则dp[i]要在dp[i]和dp[j] + 1中选取一个最大值

复杂度

时间复杂度:

O ( n 2 ) O(n^2) O(n2);其中 n n n表示数组nums的大小

空间复杂度:

O ( n ) O(n) O(n)

Code

class Solution {/*** Longest Increasing Subsequence** @param nums Given array* @return int*/public int lengthOfLIS(int[] nums) {int[] dp = new int[nums.length];for (int i = 0; i < nums.length; ++i) {dp[i] = 1;}for (int i = 0; i < nums.length; ++i) {for (int j = 0; j < i; ++j) {if (nums[j] < nums[i]) {dp[i] = Math.max(dp[i], dp[j] + 1);}}}int res = 0;for (int i = 0; i < nums.length; ++i) {res = Math.max(res, dp[i]);}return res;}
}
http://www.lryc.cn/news/387479.html

相关文章:

  • 【ARM】Ulink不同的系列对于芯片的支持和可以支持keil软件
  • 【入门】5分钟了解卷积神经网络CNN是什么
  • dB分贝入门
  • 力扣1744.你能在你最喜欢的那天吃到你最喜欢的糖果吗?
  • Redis的使用和原理
  • 扫描全能王的AI驱动创新与智能高清滤镜技术解析
  • 【Linux】Linux系统配置,linux的交互方式
  • Linux中--prefix命令使用及源码安装
  • 加速科技Flash存储测试解决方案 全面保障数据存储可靠性
  • 数字化那点事:一文读懂数字乡村
  • 彻底解决 macos中chrome应用程序 的 无法更新 Chrome 弹窗提示 mac自定义参数启动 chrome.app
  • 等级保护 | 如何完成等保的建设整改
  • 开发微信小程序从开始到部署上线,哪些个流程需要付费
  • python r, b, u, f 前缀详解
  • Go语言简介
  • css持续学习
  • FFmpeg 关于AV1编码指导文档介绍
  • 鸿蒙系统——强大的分布式系统
  • centos7 安装单机MongoDB
  • 数据库回表介绍
  • python多继承的3C算法
  • 掌握Python编程的深层技能
  • Echarts地图实现:各省市计划录取人数
  • shell脚本if/else使用示例
  • 【D3.js in Action 3 精译】1.2.2 可缩放矢量图形(二)
  • Java中的Monad设计模式及其实现
  • Dahlia Hart: Stylized Casual Character(休闲角色模型)
  • vector容器
  • 二进制常用知识整理<java>
  • 基于Docker的淘客返利平台部署