java - 检测数组中的所有突然变化

标签 java arrays algorithm

如何发现数组中的突变?例如,如果您有以下数组:

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/

相关文章:

java - 在不继承抽象类的情况下模拟对抽象类的公共(public)方法的调用,最好使用 mockito

php - 如何在 PHP 中使用 array_walk 对三维数组进行排序?

'global' 数组的 javascript 作用域问题

ios - 如何在 Swift 中使用按钮单击功能将 [PHAsset] 转换为 PHAsset

algorithm - 如何存储未知大小的顺序呈现集合的样本?

java - 此代码抛出 NullPointerException 是标准行为吗?

java - 解码 xs :time 的类型

algorithm - IDA* 与 A* 算法的重点是什么

java - 同步 map 与集合的最佳复杂度

Java 通过蛮力搜索数组并且不花费内存?