Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 组成一组递增整数的元素的最长子序列_C++_Arrays_Algorithm - Fatal编程技术网

C++ 组成一组递增整数的元素的最长子序列

C++ 组成一组递增整数的元素的最长子序列,c++,arrays,algorithm,C++,Arrays,Algorithm,求一个数组的最长连续子序列的长度,该数组的元素组成一组连续递增的整数。 输入文件由数字n(数组中的元素数)和n整数组成。 示例输入-1016452381077 示例输出-6(1 6 4 5 2 3,因为它们构成了集合1 2 3 4 5 6)。 我能写一个满足0的算法,像这样怎么样?按降序排列数组元素,每个元素及其索引范围作为局部最大值(例如,a[0]=10将是数组索引的最大值,[0,10],而a[3]=4将是数组索引的局部最大值,[3,3]。现在遍历此列表,找到索引范围都包含在起始范围内的最长连

求一个数组的最长连续子序列的长度,该数组的元素组成一组连续递增的整数。 输入文件由数字
n
(数组中的元素数)和
n
整数组成。
示例输入-1016452381077
示例输出-6(1 6 4 5 2 3,因为它们构成了集合1 2 3 4 5 6)。

我能写一个满足
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] <--
1016452381077
=> 10, [ 0,10]
8, [ 1, 7]
7, [ 9,10]

6、[1,6]类似的内容如何?按降序排列数组元素,每个元素与其索引范围作为局部最大值相结合(例如,
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] <--
1016452381077
=> 10, [ 0,10]
8, [ 1, 7]
7, [ 9,10]

6、[1,6]也许如果你发布一些代码来展示你所做的尝试,人们可能会留下问题(尽管,因为你要求的是更有效的算法,我不是你技术上所能提供的比你已经拥有的更多的东西…)也许如果你发布一些代码来展示你所做的尝试,人们可能会留下问题。(尽管如此,由于您要求的是一种更高效的算法,我不认为您在技术上能够提供比您现有的更多的算法…)好吧,这的确是一个很好的解决方案,但使用循环元素确实会对算法造成伤害。例如,如果在5之后出现另一个5,则算法会变得非常模糊。或者在更糟糕的情况下,如果数组是-1 5 4 2 3 7 1 5 4 2 3?@DavidAsryan感谢您的评论。将每组重复项排列在一个排序的数组中根据其开始索引。任何作为术语延续候选项的重复项都是(1)术语后的下一个较低的数字,(2)由于是下一个较低的数字,必须共享相同的开始和结束(如果它们位于下一个较高术语的同一侧),或者具有互斥的索引范围作为局部最大值(与示例中作为7延续候选的5一样,
1 5 4 2 3 7 1 5 4 2 3
)@DavidAsryan您也可以澄清一下这样的问题的解决方案:
1 1 2 3 3 4
。因为问题只需要子序列的长度,所以看起来不愚蠢,但我还是不明白如何处理重复项。请您再澄清一点。好吧,这确实是一个很好的解决方案,但有重复当前元素确实会损害算法。例如,如果在5之后出现另一个5,则算法会变得非常模糊。或者在更糟糕的情况下,如果数组是-1 5 4 2 3 7 1 5 4 2 3怎么办?@DavidAsryan感谢您的评论。将每组重复项按开始索引排序排列在一个数组中。所有重复项延续一个学期的候选人是(1)学期后下一个较低的数字,(2)由于是下一个较低的数字,必须具有相同的起点和终点(如果他们在下一个较高学期的同一侧),或者具有互斥的指数范围作为局部最大值(与示例中作为7延续候选的5一样,
1 5 4 2 3 7 1 5 4 2 3
)@DavidAsryan您可能还需要澄清这样的问题的解决方案:
1 1 2 3 3 4 4
。由于问题只需要子序列的长度,因此不必看起来很愚蠢,但我再次不明白如何处理重复项。请您再澄清一点。