【发布时间】:2017-01-13 10:37:09
【问题描述】:
如何发现数组的突变?例如,如果您有以下数组:
1,3,8,14,58,62,69
In this case, there is a jump from 14 to 58
或
79,77,68,61,9,3,1
In this case, there is a drop from 61 to 9
在这两个例子中,都有小跳和大跳。例如,在第二种情况下,从 77 到 68 有一个小的下降。但是,如果发现更大的跳跃/下降,则必须忽略这一点。我脑子里有以下算法,但我不确定这是否会涵盖所有可能的情况:
ALGO
Iterate over array
Diff (i+1)-i
store first difference in a variable
if next diff is bigger than previous then overwrite
对于以下示例,此算法不适用于以下情况:
1, 2, 4, 6, 34, 38, 41, 67, 69, 71
这个数组有两个跳转。所以应该这样安排
[1, 2, 4, 6], [34, 38, 41], [67, 69, 71]
【问题讨论】:
-
1、2、4、6、34、38、41、67、69、71会输出什么?
[1, 2, 4, 6], [34, 38, 41], [67, 69, 71]or,28(最大跳跃)?? -
输出将是跳转/下降开始的索引/值。例如,[1, 2, 4, 6], [34, 38, 41], [67, 69, 71] 将有类似 6 和 41 的输出
-
这听起来很像edge detection 问题,或一维模拟step detection。
-
@friendlydog,我找不到该算法的任何 Java 实现。或者实现这个 alog 的简单步骤(不是复杂的数学符号)。
-
你是如何定义大跳或大跌的?有阈值吗?