最长的子序列,其元素构成一组递增的整数

时间:2017-04-14 13:21:28

标签: c++ arrays algorithm

查找数组的最长连续子序列的长度,其中元素构成一组连续递增的整数。 输入文件由数字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

1 个答案:

答案 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] <--