【Leetcode 热题 100】300. 最长递增子序列
问题背景
给你一个整数数组 n u m s nums nums,找到其中最长严格递增子序列的长度。
子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如, [ 3 , 6 , 2 , 7 ] [3,6,2,7] [3,6,2,7] 是数组 [ 0 , 3 , 1 , 6 , 2 , 2 , 7 ] [0,3,1,6,2,2,7] [0,3,1,6,2,2,7] 的子序列。
数据约束
- 1 ≤ n u m s . l e n g t h ≤ 2500 1 \le nums.length \le 2500 1≤nums.length≤2500
- − 1 0 4 ≤ n u m s [ i ] ≤ 1 0 4 -10 ^ 4 \le nums[i] \le 10 ^ 4 −104≤nums[i]≤104
解题过程
子序列而不是子数组,优先考虑回溯法而不是滑窗。
递归方法中必须要有一个下标表示当前要选择的数字的位置,选或不选的方法还需要额外记录子序列中前一个数相关的信息,否则不能保证严格递增。因此,这题选择选哪一个的做法代码更简洁。
对于动态规划问题,有一种优化时间复杂度的方案是交换状态和状态值,这题可以在数组中维护子序列末尾元素的最小值,遍历数组的过程中只有两种操作:添加或修改元素。
修改的一定是不小于当前元素的第一个元素,如果没有这样的元素,就应将新元素添加到末尾。
配合二分查找,这样可以将时间效率优化到 O ( N l o g N ) O(NlogN) O(NlogN) 这个量级。
具体实现
递归
class Solution {private int[] nums;private int[] memo;public int lengthOfLIS(int[] nums) {this.nums = nums;int n = nums.length;memo = new int[n];int res = 0;for (int i = 0; i < n; i++) {res = Math.max(res, dfs(i));}return res;}private int dfs(int i) {if(memo[i] > 0) {return memo[i];}for (int j = 0; j < i; j++) {if(nums[j] < nums[i]) {memo[i] = Math.max(memo[i], dfs(j));}}return ++memo[i];}
}
递推
class Solution {public int lengthOfLIS(int[] nums) {int n = nums.length;int res = 0;int[] dp = new int[n];for (int i = 0; i < n; i++) {for (int j = 0; j < i; j++) {if (nums[j] < nums[i]) {dp[i] = Math.max(dp[i], dp[j]);}}res = Math.max(res, ++dp[i]);}return res;}
}
贪心
class Solution {public int lengthOfLIS(int[] nums) {int n = nums.length;int res = 0;int[] dp = new int[n];for (int i = 0; i < n; i++) {for (int j = 0; j < i; j++) {if (nums[j] < nums[i]) {dp[i] = Math.max(dp[i], dp[j]);}}res = Math.max(res, ++dp[i]);}return res;}
}
相关文章:
【Leetcode 热题 100】300. 最长递增子序列
问题背景 给你一个整数数组 n u m s nums nums,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如, [ 3 , 6 , 2 , 7 ] [3,6,2,7] [3,6,2…...
macos的图标过大,这是因为有自己的设计规范
苹果官方链接:App 图标 | Apple Developer Documentation 这个在官方文档里有说明,并且提供了sketch 和 ps 的模板。 figma还提供了模板: Figma...
信号处理以及队列
下面是一个使用C和POSIX信号处理以及队列的简单示例。这个示例展示了如何使用信号处理程序将信号放入队列中,并在主循环中处理这些信号。 #include <iostream> #include <csignal> #include <queue> #include <mutex> #include <thread…...
微信阅读网站小程序的设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
美国公司有意收购TikTok(抖音)
众所周知,2016年TikTok由字节跳动集团推出,最初以“抖音”为名在中国市场推广,随后于2017年下半年出海,面向国际市场更名为“TikTok”。 新华社1月19日快讯:“TikTok公司当地时间18日晚通知美国用户,由于美…...
《Java程序设计》课程考核试卷
一、单项选择题(本大题共10个小题,每小题2分,共20分) 1.下列用来编译Java源文件为字节码文件的工具是( )。 A.java B.javadoc C.jar D.javac 2…...
ThinkPHP 8 操作JSON数据
【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书 使用VS Code开发ThinkPHP项目-CSDN博客 编程与应用开…...
《AI赋能光追:开启图形渲染新时代》
光线追踪技术是图形渲染领域的重大突破,能够通过模拟光的传播路径,精准渲染反射、折射、阴影和间接光照等效果,实现高度逼真的场景呈现。而人工智能的加入,更是为光线追踪技术带来了前所未有的变革,主要体现在以下几个…...
LeetCode | 最小路径和的两种解决办法
第一种:动态规划 思路 在过去,有这样一个词,那就是遇难则反,从起点推导出最小路径和是困难的,那我们就从终点去推导。 解题过程 我们都知道一个方块,只能向右或向下。在初始化dp之后,我们会…...
Windows 环境下 Docker Desktop + Kubernetes 部署项目指南
Windows 环境下 Docker Desktop Kubernetes 部署项目指南 一、环境准备二、安装与配置 Kubernetes安装 windows 版的 docker启动 kubernetes安装 windows 版的 kubectl 工具下载 k8s-for-docker-desktop启动 Kubernetes Dashboard 二、在 Kubernetes 上部署项目创建一个 demo …...
WebSocket 详解:全双工通信的实现与应用
目录 一、什么是 WebSocket?(简介) 二、为什么需要 WebSocket? 三、HTTP 与 WebSocket 的区别 WebSocket 的劣势 WebSocket 的常见应用场景 WebSocket 握手过程 WebSocket 事件处理和生命周期 一、什么是 WebSocket…...
神经网络|(二)sigmoid神经元函数
【1】引言 在前序学习进程中,我们已经了解了基本的二元分类器和神经元的构成,文章学习链接为: 神经网络|(一)加权平均法,感知机和神经元-CSDN博客 在此基础上,我们认识到神经元本身在做二元分类,是一种非…...
云原生:构建现代化应用的基石
一、什么是云原生? 云原生是一种构建和运行应用程序的方法,旨在充分利用云计算的分布式系统优势,例如弹性伸缩、微服务架构、容器化技术等。云原生应用程序从设计之初就考虑到了云环境的特点,能够更好地适应云平台的动态变化&…...
【浏览器 - Chrome调试模式,如何输出浏览器中的更多信息】
在开发过程中,如果不主动console.log,浏览器中的信息有些不会主动输出到 控制台console里面。这个如果是一些浏览器内部的接口调试,则会很麻烦。比如RTCPeerConnection过程 ,RTCPeerConnection属于浏览器内部的方法,其…...
不同操作系统(Windows、Linux)上安装和配置Tomcat的详细教程
以下是在不同操作系统(Windows、Linux)上安装和配置Tomcat的详细教程: Windows系统下Tomcat的安装与配置 下载Tomcat 访问Apache Tomcat官方网站(https://tomcat.apache.org)。在“Download”页面,根据需求选择合适的Tomcat版本。例如,选择“Core”下的zip压缩包下载。…...
MapReduce,Yarn,Spark理解与执行流程
MapReduce的API理解 Mapper 如果是单词计数:hello:1, hello:1, world:1 public void map(Object key, // 首字符偏移量Text value, // 文件的一行内容Context context) // Mapper端的上下文,…...
unity导入图片素材注意点和AI寻路模块导入
当我们导入了图片资源,我们需要设置为Sprite类型 UI资源的位置通常是Rect Transform 要进行转化: (imgHP.transform as RectTransform).sizeDelta new Vector2((float)hp / maxHP * hpW,74); RectTransform 是Unity中用于UI元素的特殊变换组件&#…...
单片机-STM32 IIC通信(OLED屏幕)(十一)
一、屏幕的分类 1、LED屏幕: 由无数个发光的LED灯珠按照一定的顺序排列而成,当需要显示内容的时候,点亮相关的LED灯即可,市场占有率很高,主要是用于户外,广告屏幕,成本低。 LED屏是一种用发光…...
Windows Docker Desktop安装及使用 Docker 运行 MySQL
Docker Desktop是Docker的官方桌面版,专为Mac和Windows用户设计,提供了一个简单易用的界面来管理和运行Docker容器。它集成了Docker引擎,为开发人员提供了一个快速、可靠、可扩展的方式来构建、运行和管理应用。DockerDesktop的优势在于&…...
开源RAG框架Kotaemon及其混合检索系统的优势与局限
开源RAG框架Kotaemon及其混合检索系统的优势与局限 大模型(LLMs)的快速发展令人瞩目,但如何让这些模型更有效地利用外部知识,一直是业界关注的焦点。检索增强生成(Retrieval-Augmented Generation,RAG&…...
Day21-【软考】短文,计算机网络开篇,OSI七层模型有哪些协议?
文章目录 OSI七层模型有哪些?有哪些协议簇?TCP/IP协议簇中的TCP协议三次握手是怎样的?基于UDP的DHCP协议是什么情况?基于UDP的DNS协议是什么情况? OSI七层模型有哪些? 题目会考广播域 有哪些协议簇&#x…...
Kmesh v1.0 正式发布!7 大特性提升网络流量管理效率和安全性
Kmesh v1.0 正式发布!7 大特性提升网络流量管理效率和安全性 2025 年新年伊始,Kmesh 团队正式发布了 Kmesh v1.0234。以下是 Kmesh v1.0 提升网络流量管理效率和安全性的 7 大特性35: 加密通信:引入 IPsec 协议对节点间流量加密&a…...
巧妙获取ListBox控件的选中条目(按点击顺序)
实例需求:用户窗体中有两个控件 列表框:ListBox1,支持多选按钮:CommandButton1 现在需要记录用户在列表框中选择顺序(不考虑选中后再次点击取消选中的操作),如下图所示。 Dim objDic As Objec…...
动手学图神经网络(3):利用图神经网络进行节点分类 从理论到实践
利用图神经网络进行节点分类:从理论到实践 前言 在之前的学习中,大家对图神经网络有了初步的了解。本次教程将深入探讨如何运用图神经网络(GNNs)来解决节点分类问题。在节点分类任务里,大家往往仅掌握少量节点的真实…...
Level DB --- TableBuilder
TableBuilder是Level DB里面重要的类和模块,它描述了数据如何序列化到文件中,以及数据里面的格式逻辑。它里面包含了之前介绍的多个模块和类。 data block、filter block和index block block格式,之前已经介绍过Level DB --- BlockBuilder-…...
Leecode刷题C语言之组合总和②
执行结果:通过 执行用时和内存消耗如下: int** ans; int* ansColumnSizes; int ansSize;int* sequence; int sequenceSize;int** freq; int freqSize;void dfs(int pos, int rest) {if (rest 0) {int* tmp malloc(sizeof(int) * sequenceSize);memcpy(tmp, seque…...
Hook 函数
什么是hook函数? 在计算机编程中,hook函数是指在特定的事件发生时被调用的函数,用于在事件发生前或后进行一些特定的操作。通常,hook函数作为回调函数被注册到事件处理器中,当事件发生时,事件处理器会自动…...
自然元素有哪些选择?
在设计浪漫风格的壁纸时,自然元素是营造温馨、梦幻氛围的关键。以下是一些常见的自然元素选择,以及它们在壁纸设计中的应用建议: 一、花朵 玫瑰: 特点:玫瑰是浪漫的象征,尤其是红色和粉色玫瑰,…...
【miniconda】:langraph的windows构建
langraph需要python3.11 langraph强烈建议使用py3.11 默认是3.12 官方 下载仓库 下载老版本的python (后续发现新版miniconda也能安装老版本的python) 在这里...
自动驾驶中的多传感器时间同步
目录 前言 1.多传感器时间特点 2.统一时钟源 2.1 时钟源 2.2 PPSGPRMC 2.3 PTP 2.4 全域架构时间同步方案 3.时间戳误差 3.1 硬件同步 3.2 软件同步 3.2.3 其他方式 ① ROS 中的 message_filters 包 ② 双端队列 std::deque 参考: 前言 对多传感器数据…...
