arrays - 从大多数线性递增数组中删除异常值
问题描述
给定一个应该线性递增的数组,但是
- 可能缺少一些数字和
- 可能会输入一些意想不到的数字,
你将如何构建一个算法来删除数组中的所有异常值?
可能的数组示例:
1,2,3,4,1,1,1,100,5,6,7
1,2,4,100,5,6,7
1,2,4,100,101,5,6,7,300
2,3,4,5,6,7,300
在上面的所有示例中,您应该能够知道数组应该是 1-7 或 2-7。
一些现实生活中的示例数组:
1, 2, 295, 296, 297, 4, 5, 6, 8, 9, 10, 11, 12, 13, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 6, 6, 6, 6, 5, 5, 6, 6, 6, 6, 6, 4, 6, 6, 3, 4, 6, 6, 6, 5, 6, 6, 6, 4, 5, 6, 3, 6, 6, 6, 6, 6, 6, 6, 5, 6, 6, 6, 6, 6, 4, 6, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 4, 6, 6, 6, 6, 6, 6, 5, 6, 6, 6, 3, 3, 6, 6, 6, 3, 6, 6, 4, 4, 6, 6, 6, 6, 6, 3, 6, 6, 6, 3, 6, 4, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 6, 6, 3, 6, 6, 6, 6, 6, 6, 5, 6, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 6, 6, 6, 6, 6, 6, 15, 18, 20, 21, 22, 23, 24, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37
1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19、20、21、26、712、383、114、 118, 225, 304, 323, 349, 357, 550, 556, 590, 649, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43、44、45、46、47、48、49、51
我想出的一种解决方案是过滤掉所有大于 N (=5?) 大于前一个有效值的值,以及所有小于前一个有效值的值。
const filterOutliers = (someArray) => {
let previousValidValue = null;
return someArray.filter((x, index) => {
//Assume the first value is valid - although this assumption might not always be true.
if(!previousValidValue) {
previousValidValue = x;
return true;
}
// if the number is less than the previous valid value, remove it
if(x < previousValidValue) {
return false;
}
// if the number is more than 5 greater than the last valid value, remove it
if(x > previousValidValue + 5) {
return false;
}
previousValidValue = x;
return true;
})
}
潜在相关链接:Javascript:从数组中删除异常值?
解决方案
您的内部数据值似乎确实有一个恒定的增量。所以计算增量,采用模式并保持遵循这个增量的值序列(到一个合适的容差)。
推荐阅读
- python - Python ctypes cdll.LoadLibrary,实例化一个对象,执行它的方法,私有变量地址被截断
- wordpress - Wordpress 主页溢出和创建空白空间
- javascript - Javascript ES6(React)如何使用导入类的方法?
- android - 摆脱 Android Studio 上启动器图标的 Image Asset 边距
- shell - 是否有任何理由在 find ... -exec command_to_run {} \; 中引用占位符 陈述?
- python - 无法从 StreamSets Jython Evaluator 写入数据
- python - 从 Python 控制台运行 Selenium webdriver
- presto - 我们可以从它的 GUI 配置 presto 的数据库连接器信息吗
- c# - 我可以在 unity3d 的 AnimationController 基础层中创建多少个状态?
- c# - 无法在 WPF 中设置 Canvas ZIndex