标题:一道求最长递增公共子序列的题,本地编译不成
只看楼主
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
得分:0 
这个题应该是LICS吧
2018-06-08 22:23
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
得分:0 
空间上优化了,可是时间上又超了。。总是要用到两重循环。。
2018-06-08 22:24
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
得分:0 
啊不好意思看错题了,题目要求这个子序列的数必须是后一项比前一项多1的,比如2,3,4,5,6...还不是一般的LICS
2018-06-08 23:39
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
这题我知道了,要分开一步一步来~

题目描述:求两个整形序列的最长公共递增子序列,只需要输出其长度。其中两序列长度1<=n,m<=100000,每个元素大小在[1,1000000]之间,测试样例不多于1000组。


看题,切入点是每个元素大小在[1,1000000]之间

首先,原数组里面可能会出现重复的元素,这样在求递增子序列的时候很明显后面出现的会覆盖掉,只保留前面出现的(这点其实非常至关重要)

所以说不用考虑重复元素出现的情况了~

下面的解法我就先分开说,一步一步实现~

1----把第一个子序列的对应元素用大小为1000000数组的进行映射,映射值是该元素所在原数组的下标,重复出现的直接忽略,也就是只保留第一次出现的下标就可以了~没有出现的元素用个标记分开或者初始化全部为不重复标记~

2----用二分法求第二个递增子序列,注意在所求元素的值所对应的第一个子序列里面后一个元素的下标要比前一个大才进行操作(也就是说第一个数组没有出现过的元素可以初始化为最大值表示),二分法求最长公共子序列可以参考

https://bbs.bccn.net/thread-485375-1-1.html

不知道有没有问题,这样看看~

[此贴子已经被作者于2018-6-9 02:39编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-06-09 02:22



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-487639-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.109848 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved