LeetCode 300. 最长递增子序列

news2024/11/28 14:49:09

🌈🌈😄😄

欢迎来到茶色岛独家岛屿,本期将为大家揭晓LeetCode 300. 最长递增子序列,做好准备了么,那么开始吧。

🌲🌲🐴🐴

一、题目名称

LeetCode 300. 最长递增子序列

二、题目要求

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

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

三、相应举例

示例 1:

输入:nums = [10,9,2,5,3,7,101,18]
输出:4
解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。
示例 2:

输入:nums = [0,1,0,3,2,3]
输出:4
示例 3:

输入:nums = [7,7,7,7,7,7,7]
输出:1

四、限制要求

  • 1 <= nums.length <= 2500
  • -104 <= nums[i] <= 104

五、解决办法

动态规划

创建一个数组dp,初始化为1。使用两重循环,第一重循环遍历nums数组,当作右指针,第二重循环遍历之前的数,当作左指针,判断当前数是否大于之前的数。如果是,更新dp[j]的值为dp[i]+1。

这里要注意dp数组中当前所求值要取前面遍历过的最大值,比如

int nums[]={0,1,0,3,2,3};

在dp索引到达3时,前方要取0->1->3而不是单纯的更新dp[j]的值为dp[i]+1,所以代码为 

dp[j] =  Math.max(dp[i] + 1,dp[j]);

更新maxans的值为dp[j]的最大值。最后返回maxans。

六、代码实现

class Solution {
     public static int lengthOfLIS(int[] nums) {
        if (nums.length == 0) {
            return 0;
        }
        int[] dp = new int[nums.length];
        dp[0] = 1;
        int maxans = 1;
        for (int j = 1; j < nums.length; j++) {
            dp[j] = 1;
            for (int i = 0; i < j; i++) {
                if (nums[i] < nums[j]) {
                    dp[j] =  Math.max(dp[i] + 1,dp[j]);
                }
            }
            maxans = Math.max(maxans, dp[j]);
        }
        return maxans;


    }
}

复杂度分析

时间复杂度:O(n^2) ,其中 n 为数组 nums 的长度。动态规划的状态数为 n,计算状态 dp[i] 时,需要O(n) 的时间遍历 dp[0…i−1] 的所有状态,所以总时间复杂度为 O(n 2)。

空间复杂度:O(n),需要额外使用长度为 n 的 dp 数组。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/166484.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring之AOP简单讲解

目录 一&#xff1a;基本概念 二&#xff1a;案例&#xff1a;模拟AOP的基础代码 三&#xff1a;AOP相关概念 四&#xff1a;AOP入门案例思路分析 五&#xff1a;AOP工作流程 六&#xff1a;AOP核心概念 七&#xff1a;AOP切入点表达式 八&#xff1a;xml方式AOP快速入门…

动态内存分配/管理

目录 1、为什么要有动态内存分配 2、动态内存函数介绍 1、malloc 2、free 3、calloc ​编辑 4、realloc 3、动态内存常见的错误 4、动态内存开辟相关好题 5、c/c程序内存开辟示意图 int a, int arr[10] 是固定地向内存申请连续的一块空间&#xff0c;但不能变长或变…

快速理解机器学习、深度学习与自然语言处理

这篇文章对机器学习、深度学习、自然语言处理进行了简单的介绍&#xff0c;适合快速学习NLP与AI、ML和DL的关系。 机器学习、深度学习、自然语言处理的关系 机器学习、深度学习、自然语言处理的关系如图所示 1 机器学习&#xff08;Machine Learning&#xff09; 机器学习…

python中的设计模式:单例模式、工厂模式

目录 一.设计模式 二.单例模式 二.工厂模式 优点: 总结 一.设计模式 设计模式是一种编程套路&#xff0c;可以极大的方便程序的开发。 最常见、最经典的设计模式,就是我们所学习的面向对象了。 除了面向对象外,在编程中也有很多既定的套路可以方便开发&#xff0c;我们称…

《Linux Shell脚本攻略》学习笔记-第三章

3.1 简介 Unix为所有的设备和系统功能提供了文件形式的借口。可以通过这些特殊文件直接访问设备以及系统功能。 3.2 生成任意大小的文件 创建特定大小的文件最简单的方法就是利用dd命令。dd命令会克隆给定的输出内容&#xff0c;然后将一模一样的一份副本写入输出。 if表示输入…

个人总结:Mysql知识图谱

使用思维导图工具对mysql使用&#xff0c;进行知识总结。着重说下explanid SELECT识别符。这是SELECT查询序列号。这个不重要,查询序号即为sql语句执行的顺序select_type select类型table 输出的行所用的表&#xff0c;这个参数显而易见&#xff0c;容易理解partitions type 连…

Android系统启动(四) — Launcher 启动过程

1 Launcher 概述 系统启动的最后一步是启动一个应用程序来显示系统中已经安装的应用程序&#xff0c;这个应用程序就叫做 Launcher。Launcher 在启动过程中会请求 PackageManagerService 返回系统中已经安装的应用程序信息&#xff0c;并将这些信息封装成一个快捷图标列表显示…

阿里系-淘宝接口抓取及相关问题

阿里系-淘宝接口抓取 一、安装charlse抓包工具 官方下载地址 安装证书 二、安装xposed hook框架 Xponsed简介 具体安装步骤 三、安装模块 关闭阿里系ssl验证 开启http模式 支持支付宝、淘宝、淘宝直播各个接口抓取 四、效果如下 接下去一段时间更新阿里系相关接口 文章目录 一、…

搞技术的要不要学习财务知识

越是大型的集团或者企业&#xff0c;公司里面设立的部门就越多&#xff0c;也越细化&#xff0c;各部门之间既相互独立管理&#xff0c;又是相互的辅助支持&#xff0c;所以在工作中经常遇到这样的一个问题&#xff0c;就是做技术的要不要学习财务知识。这个问题其实就是把技术…

折半查找算法[二分查找法]算法的实现和解决整数溢出问题~

算法实现的要求&#xff1a; 折半查找法又称为二分查找法&#xff0c;这种方法对待查找的列表有两个要求&#xff1a; 1&#xff1a;必须采用顺序存储结构 2&#xff1a;必须按关键字大小有序排列算法思想&#xff1a; 将表中间位置记录的关键字与查找关键字进行比较&#x…

synchronized实现原理

0. 前言 造成线程安全问题的主要诱因有两点&#xff0c;一是存在共享数据(也称临界资源)&#xff0c;二是存在多个线程共同操作共享数据。因此为了解决线程安全问题&#xff0c;我们可能需要这样一个方案&#xff0c;当存在多个线程操作共享数据时&#xff0c;需要保证同一时刻…

ICV:2022年稀释制冷机全球市场规模达2.11亿美元,2028年有望出现突破点

全球前沿科技咨询机构ICV于2023年初发布了稀释制冷机&#xff08;DR&#xff09;的市场分析报告&#xff0c;ICV在报告中表示&#xff0c;2019-2015稀释制冷机的年均增长率达到8.59%以上&#xff0c;且增长率逐年上升。2022年全球稀释制冷机市场规模将达到2.11亿美元&#xff0…

从Deepmind最新成果DreamerV3启发的通用AI技术分析

一、背景 本文系个人观点&#xff1a;错漏在所难免&#xff0c;仅供参考 北京时间 1 月 12 日&#xff0c;DeepMind 官方推特发文&#xff0c;正式官宣 DreamerV3&#xff0c;这是首个能在游戏「我的世界」(Minecraft) 中不参考人类数据&#xff0c;就能从头开始收集钻石的通…

1.16中断实验

一.异常处理流程 1.异常处理流程 &#xff08;1&#xff09;保存现场&#xff08;CPU自动完成&#xff09; 将CPSR中状态保存到SPSR_<MODE>中 将CPSR寄存器的状态位T&#xff0c;改为ARM状态 根据需要&#xff0c;进制IRQ,FIQ中断&#xff0c;修改C…

java springboot 项目构建报错解决办法

这里总结了一些常见的springboot 项目构建报错及解决办法 错误: 无效的源发行版:17 错误原因 build.gradle 文件中可以通过下面两项来指定项目运行所需的jdk版本 sourceCompatibility:指定编译编译.java文件的jdk版本 targetCompatibility&#xff1a;确保class文件与target…

ARM 看门狗定时器

一、什么是看门狗、有什么用 (1) 看门狗定时器和普通的定时器并无本质区别。定时器可以设定一个时间&#xff0c;在这个时间完成之前定时器不断计时&#xff0c;时间到的时候&#xff0c;定时器会复位 CPU&#xff08;重启系统&#xff09;。 (2 )系统正常工作的时候当然不希望…

feign漫谈

feign的简单使用。 文章目录什么是feign准备工作三.如何使用3.1 定义pom文件3.2 定义配置文件及启动类注解3.3 定义feign接口什么是feign 远程调用框架 准备工作 需要nacos环境&#xff1a; 涉及到feign调用&#xff0c;就没法抛开注册中心&#xff0c;接下来我们使用主流的…

使用Python创建websocket服务端并给出不同客户端的请求

作者&#xff1a;虚坏叔叔 博客&#xff1a;https://xuhss.com 早餐店不会开到晚上&#xff0c;想吃的人早就来了&#xff01;&#x1f604; 使用Python创建websocket服务端&#xff0c;并给出不同客户端的请求 一、 WebSocket是啥 WebSocket 和HTTP一样&#xff0c;也是一种通…

java中的位运算符

在Java语言中&#xff0c;提供了7种位运算符&#xff0c;分别是按位与&#xff08;&&#xff09;、按位或&#xff08;|&#xff09;、按位异或&#xff08;^&#xff09;、取反(~)、左移(<<)、带符号右移(>>)和无符号右移(>>>)。位运算符是对long、i…

怎么把两个PDF合并成一个?这几种操作轻松合并

我们在工作中处理过的文件有很多&#xff0c;有时候为了工作更方便&#xff0c;我们通常需要把两个或是多个文件合并成为一个PDF文件&#xff0c;这样只需要打开这一个文件就可以查看全部内容&#xff0c;那么怎么把两个PDF合并成一个呢&#xff1f;这几种操作都可以轻松合并&a…