有人可以解释下面的伪代码试图做什么吗?

问题描述 投票:0回答:1

下面是伪代码。在我看来,伪代码试图在元组列表中找到峰值元素及其索引。

我这边的输出是:[(1, 4), (4, -9), (7, 12), (9, -4)].

但我不知道

(9, -4)
怎么可能是答案?

array[N] # array of N integers, indexed 0 to N-1;
# assume it’s populated with [1,4,2,-2,-9,10,2,12,2,-4,-4,-4,-4,2,6,7]
peak = array[0]
index = 0
output = [] # array of tuples
For x in 1..N-1
    if (array[x]*array[x-1] > 0)
       if peak < 0 and array[x] < peak
          peak = array[x]
          index = x
       if peak >= 0 and array[x] > peak
          peak = array[x]
          index = x

    else
       output.insert( (index, peak) )
       peak = array[x]
       index = x
end if
end for
return output
arrays pseudocode
1个回答
0
投票

伪代码试图在元组列表中找到峰值元素及其索引

看起来可能是这样,但实际上并没有发生。示例输入具有输出中没有的其他局部极值。如果我们将局部极值(峰值)定义为数组中未被较大值和较小值包围的任何元素,则示例输入将具有这些局部极值:

[1, 4, 2, -2, -9, 10, 2, 12, 2, -4, -4, -4, -4, 2, 6, 7]
 ^  ^          ^  ^   ^  ^       ^   ^   ^   ^        ^

我们可以有不同的定义来排除第一个和最后一个元素,或者排除一系列重复值,但值 10、2 和 12 仍将被视为局部极值,但此伪代码不会输出这些值.

符号从一个值变为下一个值时,伪代码将输出一对:然后输出的一对将代表前一部分同符号数中的峰值。由于在您的示例中输入符号更改了 4 次,因此预计输出中有 4 对。此外,如果输入仅包含负数或仅包含正数,则输出将为空。

符号的变化包括涉及零的情况。此外,该算法将 never 包括输出中的最后一个元素,但可以包括第一个元素。当您镜像输入时,它并不总是提供镜像输出。

例如,我们得到这些输出:

输入 输出
[0,0,0,0]
[(0,0),(1,0),(2,0)]
[1,1,1,1]
[]
[-1,0,1,2]
[(0,-1),(1,0)]
[2,1,0,-1]
[(0,2),(2,0)]
[0,1,0,1]
[(0,0),(1,1),(2,0)]
[1,2,1]
[]
[-3,-2,-1,0,1,2,3,2,1,0,-1,-2,-3]
[(0,-3),(3,0),(6,3),(9,0)]

我没有看到这个算法的实际用途,想知道它是否真的按照作者的意图去做。

© www.soinside.com 2019 - 2024. All rights reserved.