gpt4 book ai didi

c# - 如何在 C# 中的列表中查找连续整数?

转载 作者:太空宇宙 更新时间:2023-11-03 22:16:42 25 4
gpt4 key购买 nike

如何从 C# 中的整数列表中找到整数的最长递增子序列?

最佳答案

您只需要分解成一个更小的问题,即在给定起点的情况下找到递增序列的长度。

在伪代码中,这类似于:

def getSeqLen (int array[], int pos):
for i = pos + 1 to array.last_element:
if array[i] <= array[i-1]:
return i - pos
return array.last_element + 1 - pos

然后遍历数组,查看这些单独的序列。您知道序列必须在特定点分开,否则序列会更长。换句话说,这些递增序列没有重叠:

def getLongestSeqLen (int array[]):
pos = 0
longlen = 0
while pos <= array.last_element:
len = getSeqLen (array, pos)
if len > longlen:
longlen = len
pos = pos + len
return longlen

通过图形解释的方式,考虑以下顺序:

 element#: 0  1  2  3  4  5  6  7  8  9 10 11 12
value: 9 10 12 7 8 9 6 5 6 7 8 7 8
^ ^ ^ ^ ^

在这种情况下,^ 字符标记了子序列的明确边界。

从元素 0 开始,getSeqLen 返回 3。由于这大于当前最长长度 0,我们保存它并将 3 添加到当前位置(得到 3)。

然后在元素 3 处,getSeqLen 返回 3。由于这不大于当前最长长度 3,我们忽略它但我们仍将 3 添加到当前位置(得到 6)。

然后在元素 6 处,getSeqLen 返回 1。由于这不大于当前最长长度 3,因此我们忽略它但我们仍将 1 加到当前位置(得到 7)。

然后在元素 7 处,getSeqLen 返回 4。由于这大于当前最长长度 3,我们保存它并将 4 加到当前位置(得到 11)。

然后在元素 11 处,getSeqLen 返回 2。由于这不大于当前最长长度 4,我们忽略它但我们仍将 2 添加到当前位置(得到 13)。

然后,由于元素 13 超出了末尾,我们简单地返回找到的最长长度 (4)。

关于c# - 如何在 C# 中的列表中查找连续整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4859239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com