查找数组的最长连续子序列的长度,其中元素构成一组连续递增的整数。
输入文件由数字n
(数组中的元素数)和n
整数组成。
示例输入 - 10 1 6 4 5 2 3 8 10 7 7
示例输出 - 6(1 6 4 5 2 3,因为它们组成1 2 3 4 5 6)
我能够编写一个满足0<n<5000
的算法,但为了获得100分,算法必须适用于0<=n<=50000
。
答案 0 :(得分:0)
这样的事情怎么样?按降序排列数组元素,每个元素的索引范围与本地最大值相关联(例如,A[0] = 10
将是数组索引的最大值[0, 10]
,而A[3] = 4
将是数组索引的局部最大值[3,3]
。现在遍历此列表并找到最长的,连续递减的序列,其中索引范围全部包含在起始范围内。
10 1 6 4 5 2 3 8 10 7 7
=> 10, [ 0,10]
8, [ 1, 7]
7, [ 9,10]
6, [ 1, 6] <--
5, [ 3, 6] | ranges
4, [ 3, 3] | all
3, [ 5, 6] | contained
2, [ 5, 5] | in [1,6]
1, [ 1, 1] <--