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

LeetCode 300. Longest Increasing Subsequence 题解

LeetCode 300. Longest Increasing Subsequence 题解题目描述给你一个整数数组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解题思路方法一动态规划思路定义dp[i]为以nums[i]结尾的最长递增子序列的长度状态转移方程dp[i] max(dp[j] 1) for j in 0..i-1 if nums[j] nums[i]初始化dp[i] 1因为每个元素自身构成一个长度为 1 的子序列最终结果为max(dp)复杂度分析时间复杂度O(n²)其中 n 是数组的长度。需要双重循环遍历数组。空间复杂度O(n)需要一个长度为 n 的数组来存储状态。方法二贪心算法 二分查找思路维护一个数组tails其中tails[i]表示长度为i1的递增子序列的最小末尾元素遍历数组中的每个元素如果当前元素大于tails的最后一个元素将其添加到tails末尾否则使用二分查找找到tails中第一个大于等于当前元素的位置并用当前元素替换它最终tails的长度即为最长递增子序列的长度复杂度分析时间复杂度O(n log n)其中 n 是数组的长度。遍历数组需要 O(n) 的时间每次二分查找需要 O(log n) 的时间。空间复杂度O(n)需要一个数组来存储tails。代码实现方法一动态规划class Solution: def lengthOfLIS(self, nums: List[int]) - int: n len(nums) if n 0: return 0 dp [1] * n for i in range(1, n): for j in range(i): if nums[j] nums[i]: dp[i] max(dp[i], dp[j] 1) return max(dp)方法二贪心算法 二分查找class Solution: def lengthOfLIS(self, nums: List[int]) - int: tails [] for num in nums: # 二分查找找到第一个大于等于 num 的位置 left, right 0, len(tails) while left right: mid (left right) // 2 if tails[mid] num: left mid 1 else: right mid # 如果找到的位置等于 tails 的长度说明 num 比所有元素都大添加到末尾 if left len(tails): tails.append(num) # 否则用 num 替换该位置的元素 else: tails[left] num return len(tails)测试用例测试用例 1输入nums [10,9,2,5,3,7,101,18]输出4测试用例 2输入nums [0,1,0,3,2,3]输出4测试用例 3输入nums [7,7,7,7,7,7,7]输出1测试用例 4输入nums []输出0总结本题是动态规划的经典问题主要考察对状态定义和状态转移方程的理解。两种方法各有特点动态规划代码简洁易懂逻辑清晰但时间复杂度较高适用于小规模数据。贪心算法 二分查找时间复杂度较低适用于大规模数据但理解起来相对复杂。在实际应用中对于一般规模的数组两种方法都可以使用。但对于大规模数组贪心算法 二分查找的方法更为高效。无论使用哪种方法核心思想都是找到最长的严格递增子序列这对于解决许多实际问题都有帮助例如最长递增子序列的应用包括最长递增子串、最长递减子序列、最长不下降子序列等。

相关文章:

LeetCode 300. Longest Increasing Subsequence 题解

LeetCode 300. Longest Increasing Subsequence 题解 题目描述 给你一个整数数组 nums,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,…...

openEuler系统下NFS服务器配置实战:多场景权限管理与安全优化

1. NFS服务基础与openEuler环境准备 NFS(Network File System)是Linux系统中实现文件共享的经典方案,它允许不同主机通过网络访问远程文件系统,就像操作本地文件一样方便。在openEuler这个企业级Linux发行版上配置NFS服务&#xf…...

LeetCode 111. Minimum Depth of Binary Tree 题解

LeetCode 111. Minimum Depth of Binary Tree 题解 题目描述 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 叶子节点 是指没有子节点的节点。 示例 1: 输入:root [3,9,20,null,null,15,7] 输…...

Maestro Studio终极指南:零代码可视化移动应用测试,5分钟上手自动化

Maestro Studio终极指南:零代码可视化移动应用测试,5分钟上手自动化 【免费下载链接】maestro Painless E2E Automation for Mobile and Web 项目地址: https://gitcode.com/GitHub_Trending/ma/maestro 还在为复杂的移动应用测试流程而烦恼吗&am…...

foobox-cn:重塑foobar2000视听体验的智能界面解决方案

foobox-cn:重塑foobar2000视听体验的智能界面解决方案 【免费下载链接】foobox-cn DUI 配置 for foobar2000 项目地址: https://gitcode.com/GitHub_Trending/fo/foobox-cn 你是否曾因音乐播放器界面过于简陋而错失沉浸式的听觉享受?当功能性凌驾…...

终极指南:Google Maps Python客户端错误处理与异常类型完全解析

终极指南:Google Maps Python客户端错误处理与异常类型完全解析 【免费下载链接】google-maps-services-python Python client library for Google Maps API Web Services 项目地址: https://gitcode.com/gh_mirrors/go/google-maps-services-python 在Pytho…...

保姆级教程:用Cadence Sigrity Power DC为海思HI3516A板卡提取电源树(附常见报错处理)

从零掌握Cadence Sigrity Power DC电源树提取:HI3516A实战避坑指南 刚拿到海思HI3516A评估板时,电源网络分析往往是硬件工程师的第一个拦路虎。面对密密麻麻的PCB走线和数十个电源域,传统手动梳理方式不仅耗时费力,还容易遗漏关键…...

Hitboxer终极指南:免费开源SOCD清洁工具让游戏操作更丝滑

Hitboxer终极指南:免费开源SOCD清洁工具让游戏操作更丝滑 【免费下载链接】socd SOCD cleaner tool for epic gamers 项目地址: https://gitcode.com/gh_mirrors/so/socd 还在为游戏中的方向冲突而烦恼吗?当你在激烈的对战中同时按下左右方向键&a…...

别怕C++!手把手拆解TinyML测试框架:用micro_test.h给你的嵌入式AI代码加个‘保险丝’

嵌入式AI开发者的测试实战指南:用micro_test.h构建TinyML质量防线 在资源受限的微控制器上开发AI应用时,一个被反复验证的真理是:没有自动化测试的代码就像没有安全网的走钢丝。当你的神经网络模型需要在仅有几KB内存的设备上运行时&#xff…...

终极指南:如何实时监控Slonik连接池状态与性能指标

终极指南:如何实时监控Slonik连接池状态与性能指标 【免费下载链接】slonik A Node.js PostgreSQL client with runtime and build time type safety, and composable SQL. 项目地址: https://gitcode.com/gh_mirrors/sl/slonik Slonik作为一款为Node.js打造…...

3个高效Searchkit高亮技巧:让你的搜索结果直观又专业

3个高效Searchkit高亮技巧:让你的搜索结果直观又专业 【免费下载链接】searchkit Search UI for Elasticsearch & Opensearch. Compatible with Algolias Instantsearch and Autocomplete components. React & Vue support 项目地址: https://gitcode.com…...

鼎捷T100——快速构建简易报表:azzi310与azzi910的高效协作

1. 从零开始:理解鼎捷T100报表开发的核心模块 第一次接触鼎捷T100系统时,我被各种功能模块搞得晕头转向。直到真正用azzi310和azzi910协作完成报表开发,才发现这套组合拳的妙处。简单来说,azzi310就像你的SQL编辑器报表设计器&…...

如何高效处理大规模地图数据:Google Maps Services Python 并发处理终极指南

如何高效处理大规模地图数据:Google Maps Services Python 并发处理终极指南 【免费下载链接】google-maps-services-python Python client library for Google Maps API Web Services 项目地址: https://gitcode.com/gh_mirrors/go/google-maps-services-python …...

CMake构建类型避坑指南:为什么你的Release模式没有优化?CMAKE_BUILD_TYPE常见问题排查

CMake构建类型避坑指南:为什么你的Release模式没有优化? 在C项目开发中,构建类型的选择直接影响最终生成的可执行文件性能。许多开发者在使用CMake时都遇到过这样的困惑:明明设置了CMAKE_BUILD_TYPERelease,但生成的代…...

数据库智能运维:利用PyTorch LSTM预测数据库性能瓶颈

数据库智能运维:利用PyTorch LSTM预测数据库性能瓶颈 1. 引言:当数据库遇上AI预测 凌晨三点,运维工程师小李被刺耳的报警声惊醒——核心数据库又崩溃了。这已经是本月第三次因为性能瓶颈导致的业务中断,每次损失都超过百万。传统…...

如何快速实现Tale博客系统国际化:多语言博客搭建完整指南

如何快速实现Tale博客系统国际化:多语言博客搭建完整指南 【免费下载链接】tale 🦄 Best beautiful java blog, worth a try 项目地址: https://gitcode.com/gh_mirrors/ta/tale Tale博客系统是一款优雅的Java博客程序,提供了强大的内…...

手把手教你用RK3576开发板驱动RC522读卡器:一个SPI实战项目的完整配置流程

手把手教你用RK3576开发板驱动RC522读卡器:一个SPI实战项目的完整配置流程 在嵌入式开发领域,能够独立完成一个从硬件连接到软件驱动的完整项目,是每个开发者成长的必经之路。RK3576作为一款性能强劲的开发板,搭配常见的RC522读卡…...

终极指南:Laravel DataTables 性能优化实战——不同场景下的表现对比

终极指南:Laravel DataTables 性能优化实战——不同场景下的表现对比 【免费下载链接】laravel-datatables jQuery DataTables API for Laravel 4|5|6|7|8|9|10 项目地址: https://gitcode.com/gh_mirrors/la/laravel-datatables Laravel DataTables 是一款强…...

如何编写全面的golang-lru单元测试:覆盖所有边界条件的完整指南

如何编写全面的golang-lru单元测试:覆盖所有边界条件的完整指南 【免费下载链接】golang-lru Golang LRU cache 项目地址: https://gitcode.com/gh_mirrors/go/golang-lru 在Go语言开发中,缓存是提升性能的关键组件,而golang-lru作为一…...

不止是缓存:深入Quartus FIFO IP核,玩转Show-ahead与Normal模式下的数据吞吐率优化

深入解析Quartus FIFO IP核:Show-ahead与Normal模式下的性能优化实战 在FPGA开发中,数据流处理系统的性能瓶颈往往出现在数据缓冲环节。作为Intel Quartus Prime工具链中的关键IP核,FIFO(First In First Out)缓冲器的…...

高光谱分类别只盯着精度?聊聊Salinas数据集实战中的那些‘隐形’优化点

高光谱分类实战:超越精度的Salinas数据集深度优化指南 当我们在Salinas数据集上实现98%的分类准确率时,是否意味着模型已经完美?作为深耕遥感领域多年的技术顾问,我必须指出:高光谱图像分类的工程实践远比表面指标复杂…...

Phi-4-mini-reasoning快速上手:3步完成vLLM服务部署+Chainlit前端验证

Phi-4-mini-reasoning快速上手:3步完成vLLM服务部署Chainlit前端验证 1. 模型简介 Phi-4-mini-reasoning 是一个基于合成数据构建的轻量级开源模型,专注于高质量、密集推理的数据处理能力。作为Phi-4模型家族的一员,它经过专门微调以提升数…...

Nunchaku-FLUX.1-dev开源大模型部署案例:电商素材批量生成零API成本

Nunchaku-FLUX.1-dev开源大模型部署案例:电商素材批量生成零API成本 1. 引言 如果你正在经营一家电商店铺,或者从事内容创作、设计工作,那么对图片素材的需求一定不小。从商品主图、详情页配图,到社交媒体海报、广告素材&#x…...

OpCore-Simplify:黑苹果配置的自动化革命——从复杂调试到一键配置的智能解决方案

OpCore-Simplify:黑苹果配置的自动化革命——从复杂调试到一键配置的智能解决方案 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 传统黑苹…...

Transformer位置编码避坑指南:手把手教你用RoPE解决长文本外推难题(附Torch复现)

Transformer长文本处理实战:RoPE位置编码的工程化解决方案 在构建现代NLP系统时,处理长文本序列一直是Transformer架构面临的重大挑战。当序列长度超过模型预训练时的最大位置编码范围时,传统方法的性能会显著下降。这种现象在构建聊天机器人…...

AO3镜像站使用指南:5分钟轻松访问全球同人创作宝库

AO3镜像站使用指南:5分钟轻松访问全球同人创作宝库 【免费下载链接】AO3-Mirror-Site 项目地址: https://gitcode.com/gh_mirrors/ao/AO3-Mirror-Site 还在为无法访问Archive of Our Own(AO3)而烦恼吗?AO3镜像站项目为你提…...

Android 11文件权限避坑指南:为什么你的APP无法修改原文件?

Android 11存储权限深度解析:从沙盒机制到实战解决方案 在去年的一次应用升级中,我们团队遇到了一个棘手的问题:用户反馈图片编辑后无法保存到原位置。经过排查,发现这是Android 11引入的存储权限机制变化导致的。作为开发者&…...

Neo.mjs性能优化:如何实现每秒40,000+增量更新的秘密

Neo.mjs性能优化:如何实现每秒40,000增量更新的秘密 【免费下载链接】neo The application worker driven frontend framework 项目地址: https://gitcode.com/gh_mirrors/neo/neo Neo.mjs作为一款由应用工作器驱动的前端框架,以其卓越的性能表现…...

B站视频字幕抓取实战:Tampermonkey搭配GreasyFork脚本,5分钟搞定CC字幕导出

B站视频字幕高效提取指南:Tampermonkey与GreasyFork脚本深度应用 每次观看B站优质内容时,那些精心制作的字幕是否让你想保存下来反复学习?传统录屏或手动抄写效率低下,而专业工具又过于复杂。本文将带你探索浏览器脚本的魔法世界&…...

错误处理与HTTP状态码:Zalando RESTful API Guidelines 的异常管理机制

错误处理与HTTP状态码:Zalando RESTful API Guidelines 的异常管理机制 【免费下载链接】restful-api-guidelines A model set of guidelines for RESTful APIs and Events, created by Zalando 项目地址: https://gitcode.com/gh_mirrors/re/restful-api-guideli…...