返回信息流题目大意:给定一个数组,求数组能否分成几个子序列(下标不一定连续的子数组),每个子序列都是单调不减的且元素个数大于等于3个
注:不能用回溯或者递归,有没有更好的方法解答呢?
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #98366同步于 2019/9/23
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖
【问题】请教一道面试算法问题
zoeshaw
2019/9/23镜像同步12 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
有一个想法,基于最长递归子序列
1.找出最长递归子序列,把对应下标的元素从数组删除
2.重复(1)的操作,直至找不到最长递归子序列或者最长递归子序列长度<3
时间复杂度优于n**2 或者接近n其实
我也觉得像是贪心?但你的这个方法,对于下面这个例子
1 2 3 4 1 5 6
->
1 2 3 4 5 6,剩了1
但实际可以 1 2 3 4 和1 5 6
【 在 a940100079 的大作中提到: 】
: 有一个想法,基于最长递归子序列
: 1.找出最长递归子序列,把对应下标的元素从数组删除
: 2.重复(1)的操作,直至找不到最长递归子序列或者最长递归子序列长度<3
: ...................
所以多加一步,当序列空了,或者啥,需要去已经探索到的长序列找位置,切割?
我在寻思寻思
【 在 Viredery 的大作中提到: 】
: 我也觉得像是贪心?但你的这个方法,对于下面这个例子
: 1 2 3 4 1 5 6
: ->
: ...................
最基本就是回溯,但是面试官说有更好的方法
【 在 a940100079 的大作中提到: 】
: 有一个想法,基于最长递归子序列
: 1.找出最长递归子序列,把对应下标的元素从数组删除
: 2.重复(1)的操作,直至找不到最长递归子序列或者最长递归子序列长度<3
: ...................
贪心能解妈?主要是每次构造序列在元素个数等于3的时候不知道还是不是应该继续加后面的数,这里必然存在加/不加两个选择,还是一个回溯的思想,不知道dp可行不?
【 在 Viredery 的大作中提到: 】
: 我也觉得像是贪心?但你的这个方法,对于下面这个例子
: 1 2 3 4 1 5 6
: ->
: ...................
我感觉要先找个递减序列,这个递减序列里的每个值就是每个子序列的开头
【 在 zoeshaw 的大作中提到: 】
: 贪心能解妈?主要是每次构造序列在元素个数等于3的时候不知道还是不是应该继续加后面的数,这里必然存在加/不加两个选择,还是一个回溯的思想,不知道dp可行不?
: