如何发现数组中的突变?例如,如果您有以下数组:
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]
最佳答案
最后,这只是纯粹的统计数据。你有一个数据集;您正在寻找某种形式的 outliers 。从这个意义上说,您对检测“突然更改”的要求并不十分精确。
我认为你应该退到这里;并更深入地研究问题背后的数学 - 为您的实际问题提出清晰的“语义”和清晰的定义(例如基于平均值、偏差等)。我上面给出的维基百科链接应该是该部分的一个很好的起点。
从这里开始,要获得 Java 实现,您可能会开始查找 here .
关于java - 检测数组中的所有突然变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39341063/