最长单调递增子序列_最长递增子序列(动态规划 + 二分搜索)

c6aabcba94f5889e8396397f49989eac.png

题目

给定数组arr,返回arr的最长递增子序列

举例:arr = [2,1,5,3,6,4,8,9,7],返回的最长递增子序列为[1,3,4,8,9]

要求:如果arr的长度为N,请实现时间复杂度为O(nlogn)的方法。

分析

这一题也是经典的动态规划,那么常规的动态规划时间复杂度为O(n^2);

如果加入二分的话,可以将动态规划优化到O(nlogn)。

解法1 O(n^2)的动态规划

了解题目以后,状态为数组的当前位置i就能决定返回值,那么dp[i]表示arr[0...i]的最长递增子序列

dp[i] = max{dp[i], dp[j]+1} (0<=j<i && arr[i]>arr[j])

// dp O(n^2)
int* getdp1(int arr[], int length){int* dp= new int[length];for(int i=0;i<length;i++){dp[i]=1;for(int j=0;j<i;j++){dp[i] = max(dp[i], dp[j]+1);}}return dp;
}

如果还需要求出递增序列的话,可以这么做:

首先我们arr从右往左找出最大值,然后根据这个最大值往前递推,满足:

  • arr[j] < arr[i] && dp[i] = dp[j] +1

这种递推会推出一种特殊的情况,如果要找出所有的情况,就要再加一个循环。

解法2 O(nlogn)的动态规划

我们在上面的查找过程中,一直都是在对arr进行比较,那么可以通过空间换取时间,将递增序列保存到数组中,然后对这个数组做二分查找。

举例如下:

arr = [2,1,5,3,6,4,8,9,7]

采用ends[length+1]作为递增序列数组,right记录数组的长度

  • 遍历arr数组,arr[i]
  • 查询arr[i]在ends中的位置
    • 如果arr[i] 大于 ends[right],那么直接将arr[i]加入ends,说明符合递增
    • 否则用arr[i]替代调二分查找的位置(一直更新最小的结尾数)

详细部分看代码

int* getdp2(int arr[], int length){int* dp = new int[length+1];int* ends = new int[length+1];ends[0] = arr[0];dp[0] =1;int right = 0;int l =0;int r = 0;int m =0;for(int i=1;i<length;i++){l=0;r=right;while(l<=r){m = l + (r-l)/2;if(arr[i]>ends[m]) {l=m+1;}else{r=m-1;}}right = max(l,right);ends[l] = arr[i];dp[i] = l+1;}return dp;
}

Conclusion

这一个题目的动态规划优化是采用了二分来优化,是采用空间换时间;

之前还有路径压缩,缩小空间复杂度的题目 机器人到达指定位置方法数

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

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

相关文章

二叉排序树(BinarySortTree)

相关知识&#xff1a; 二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”&#xff08;left subtree&#xff09;和“右子树”&#xff08;right subtree&#xff09;。 二叉树中的左右子树不可随意交换。 根节点&#xff1a;一棵树最上面的节点称为根节点。 父…

惠普台式计算机系列,惠普发布设计笔记本、设计台式电脑等Z系列产品

惠普发布新一代惠普Z系列产品&#xff0c;包含设计笔记本、设计台式电脑、显示器和VR等产品。惠普Z系列设计笔记本HP ZBook 14u G6配有4K显示屏&#xff0c;支持100% Adobe RGB色域显示&#xff0c;拥有600尼特亮度&#xff0c;满足创意族群对色彩的精确要求。HP ZBook 15u G6图…

ORM多表操作之多对多查询

创建多对多的关系 authormodels.ManyToManyFleld(" ")  (推荐) 书籍对象它的所有关联作者 book_obj.authors.all() 掌握&#xff1a;通过filter values(双下划线)进行多对多的关联查询&#xff08;形式一对多&#xff09; django是将python语句翻译成sql语句执行 聚…

计算机的iscsi配置,我们将了解如何设置自己的支持iscsi配置的存储节点

iSCSI代表Internet小型计算机系统接口。它用于使用块级数据传输通过TCP / IP访问网络上的存储。NFS与iSCSI之间通常存在比较。关键区别在于NFS是文件级实现&#xff0c;而iSCSI是块级实现。这适用于TCP / IP层&#xff0c;并允许通过局域网(LAN)发送SCSI命令。在诸如iSCSI和光纤…

计算机基础知识复习资料,计算机基础知识复习资料

.Word 资料Ch1 计算机基础知识1.1 现代信息技术1.1.1、特征&#xff1a;●以数字技术和电子技术为基础&#xff1b;●以计算机及其软件为核心&#xff1b;●采用电子技术(包括激光技术)进行信息的收集、传递、加工、存储、显示与控制。1.1.2、数字技术一、二进位数字——比特(b…

linux上安装Docker

Docker的三大核心概念&#xff1a;镜像、容器、仓库 镜像&#xff1a;类似虚拟机的镜像、用俗话说就是安装文件 容器&#xff1a;类似一个轻量级的沙箱&#xff0c;容器是从镜像创建应用运行实例&#xff0c;可以将其启动、开始、停止、删除、而这些容器都是相互隔离、互不可见…

幼儿园计算机教师论文,幼儿园中班教师论文

幼儿园中班教师论文导语&#xff1a;幼儿教育是什么&#xff1f;幼儿应如何正确接受教育&#xff1f;幼儿接受与不接受教育区别又如 何&#xff1f;这些看似简单的问题&#xff0c;其实不然。在当今科技发达的今天&#xff0c;幼儿的教育起着承前启后的重要阶段&#xff0c;不仅…

ASP.NET 5 入门 (2) – 自定义配置

原文:ASP.NET 5 入门 (2) – 自定义配置ASP.NET 5 入门 (2) – 自定义配置 ASP.NET 5 理解和入门 建立和开发ASP.NET 5 项目 初步理解ASP.NET5的配置 正如我的第一篇文章ASP.NET 5 (vNext) 理解和概述 所说,ASP.NET 5的具有全新的配置机制,我们可以通过以下几点来进行理解: 支持…

中有冒号 文件路径_用Matlab脚本文件实现Excel文件的合并

日常吐槽前段时间跟同事聊天&#xff0c;同事洗脑了一个新的&#xff08;扎心的&#xff09;世界观&#xff0c;“人生分三个阶段&#xff0c;20岁时承认父母很平庸&#xff0c;30岁时承认自己很平庸&#xff0c;40岁时承认孩子很平庸”。这是这位同事在孩子学而思考试后的心得…

ios系统gps测试软件,GPS工具箱苹果版

GPS工具箱为用户准备的以手机GPS为基础的多功能位置服务的软件&#xff0c;它包括了很多非常实用的工具&#xff0c;包含线路追踪、测速、位置记录、面积测量等等&#xff0c;是GPS模块的功能发挥的非常充分到位&#xff0c;并且软件支持离线map和KML、KMZ导入导出、GPX文件导出…

用统计功能计算机计算js,js实现计算器功能

本文实例为大家分享了js实现计算器功能的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下知识点eval() 函数可计算某个字符串&#xff0c;并执行其中的的 JavaScript 代码。代码如下js计算器计算器.h1{position: relative;color:blueviolet;font-size:50px;text-align…

方法的覆盖

【转载】类继承时方法覆盖问题。&#xff08;static方法不能被”覆盖“&#xff09; (2014-04-03 17:51:17) 转载▼在看TIJ4的144页说&#xff1a; “覆盖”只有在某方法是基类的接口的一部分时才会出现。 即&#xff0c;必须能将一个对象向上转型为他的基本类型并调用相同的方…

恋与制作人 服务器错误,恋与制作人安装失败怎么办_恋与制作人安装失败解决方法_游戏吧...

恋与制作人是一款受到了很多玩家喜爱的游戏&#xff0c;游戏是奇迹暖暖原班人马打造的&#xff0c;但是却有玩家在安装时出现了安装失败的问题。下面游戏吧小编就为各位各位玩家带来了恋与制作人的安装失败解决方法。安装失败解决方法一、 安装软件时提示应用程序未安装或者提示…

create-react-app创建项目后运行npm run eject命令报错解决办法

用create-react-app创建项目,因要配置各种组件&#xff0c;比如babel&#xff0c;antd等&#xff0c; 需要运行npm run eject命令把项目的配置文件暴露出来&#xff0c;但是还是一如既然碰到报错&#xff0c;因为是在本地新创建的文件&#xff0c;没有添加git记录 解决办法&…

wps的计算机在哪里设置密码,wps文件怎么设置和取消密码 wps文件密码设置和取消的步骤方法...

在wps制作文件时&#xff0c;有时候我们需要中途离开&#xff0c;但是担心其他用户不小心操作导致文件丢失&#xff0c;那么我们可以设置wps文件密码&#xff0c;这样就可以避免了&#xff0c;那么怎么将wps文件设置密码呢?其实设置方法非常简单&#xff0c;下面教程之家网为大…

魔兽世界联盟物价稳定的服务器,一个残酷的真相!在《魔兽世界》怀旧服,女生一般都爱选联盟...

原标题&#xff1a;一个残酷的真相&#xff01;在《魔兽世界》怀旧服&#xff0c;女生一般都爱选联盟随着《魔兽世界》经典旧世的人气渐涨&#xff0c;暴雪又追加了3组PVP服&#xff0c;让不少没能抢注到心仪昵称的玩家欣喜若狂。这样一来&#xff0c;原本就饱受争议的服务器选…

SQL Server 2005 Hierarchies WITH Common Table Expressions

代码 1 createtableEmployee2 (3 Id INTIDENTITY(1,1) PRIMARYKEY, 4 [Name]varchar(30) null, 5 JobTitle varchar(30) null, 6 Manager intnull7 )8 9 insertEmployee10 selectincf, IT Director,nullunionall11 selectinc3, Finance Director,nullunionall12 select…

安卓导航无信号无服务器,无信号导航能用否

● 出发前测试为解析导航不准的原因&#xff0c;我们先来了解一下GPS导航原理。导航仪是通过接受GPS信号来确定位置所在&#xff0c;再通过存储于内存中的地图数据规划路线。在车辆行驶时&#xff0c;导航仪通过不断接受GPS信号来检测车辆所在地状态&#xff0c;从而提示指引信…

NTC热敏电阻基础以及应用和选择(转)

源&#xff1a;NTC热敏电阻基础以及应用和选择 NTC被称为负温度系数热敏电阻&#xff0c;是由Mn-Co-Ni的氧化物充分混合后烧结而成的陶瓷材料制备而来&#xff0c;它在实现小型化的同时&#xff0c;还具有电阻值-温度特性波动小、对各种温度变化响应快的特点&#xff0c;可被用…

MSN无法登陆,服务暂时不可用(错误码:80048051)

好几次MSN突然就登陆不了&#xff0c;一次是改了系统时间&#xff0c;这个好办&#xff0c;你改成当前日期时间即可&#xff1b; 还有一个可能就是脱机工作&#xff1a; 請依照以下步驟進行除錯&#xff1a; 1. 關閉Windows Live Messenger 先關閉你的MSN&#xff0c;在右下角找…