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

力扣 最长递增子序列

动态规划,二分查找。

题目

由题,从数组中找一个最长子序列,不难想到,当这个子序列递增子序列的数越接近时是越容易拉长的。从dp上看,当遍历到这个数,会从前面的dp选一个最大的数加上当前数,注意这里的dp是每遍历到一个数都会加进去。而这里的dp数组同样是用来维护到某个数时的ans,nums数组是做了比较的,因此也有可能内循环时数组中的一些数是没有做更新的,因此最后一步肯定是加上当前的数后再进行一次与更新的dp比较进行选最大。

时间复杂度:O(n^2),空间复杂度:O(n)。

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

接着是更快的,用二分查找的方法,在用二分时用mid去找目标值。而这里每遍历到数组的一个数时,同样可以与tails的数去做比较,注意如果遍历到的数与dp的数做比较时mid在大的一边没有移动过,说明这个数就是大的可以追加到原数组的尾巴,即有位置可以插入。

时间复杂度:O(nlogn),空间复杂度:O(n)。

class Solution {public int lengthOfLIS(int[] nums) {int[] tails = new int[nums.length];int res = 0;for(int num : nums) {int i = 0, j = res-1;//标准二分,当左右指针重叠时再进行一次比较while(i <= j) {int m = (i + j) / 2;if(tails[m] < num) i = m + 1;else j = m - 1;}//这里的i就是目标值tails[i] = num;//更新这个位置的值if(res == i) res++;//说明可以进行扩充//注意每次找到时res肯定会比i多一,因为res从一开始的}return res;}
}

很典型的一道例题,可以用dp的状态维护,找到前面的状态,不过每到一个数都要dp两次。而二分查找目标值的方法,刚好让比目标值小的存到tails数组,比tails数组大的直接追加,以此来更新最长递增子序列。

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

相关文章:

  • 【linux】在 Linux 服务器上部署 DeepSeek-r1:70b 并通过 Windows 远程可视化使用
  • visutal studio 2022使用qcustomplot基础教程
  • Linux:线程概念、理解、控制
  • Postman如何流畅使用DeepSeek
  • K8S下载离线安装包所需文件
  • 探索Hugging Face:开源AI社区的核心工具与应用实践
  • 【操作系统】深入理解Linux物理内存
  • npm 私服使用介绍
  • 安全筑基,智能赋能:BeeWorks IM引领企业协同新纪元
  • 水务+AI应用探索(一)| FastGPT+DeepSeek 本地部署
  • [JVM篇]垃圾回收器
  • SQL Server:查看当前连接数和最大连接数
  • DeepSeek应用——与PyCharm的配套使用
  • 【第15章:量子深度学习与未来趋势—15.3 量子深度学习在图像处理、自然语言处理等领域的应用潜力分析】
  • 多模态基础模型训练笔记-第一篇InternVL-g
  • MyBatis:动态SQL高级标签使用方法指南
  • 使用grafana v11 建立k线(蜡烛图)仪表板
  • ubuntu 安装 Redis
  • 利用docker-compose一键创建并启动所有容器
  • mysql开启gtid并配置主从
  • redis sentinel模式 与 redis 分片集群 配置
  • 2025最新在GitHub上搭建个人图床,保姆级图文教程,实现图片高效管理
  • Web后端 - Maven管理工具
  • 【python语言应用】最新全流程Python编程、机器学习与深度学习实践技术应用(帮助你快速了解和入门 Python)
  • 《探秘Windows 11驱动开发:从入门到实战》
  • 搭建Deepseek推理服务
  • Golang GC 三色标记法
  • 重新出发的LLM本地部署——DeepSeek加持下的Ollama+OpenWebUI快速部署
  • 【第3章:卷积神经网络(CNN)——3.5 CIFAR-10图像分类】
  • Django后台新建管理员