给出一个应该线性增加的数组,但是
您将如何构建算法以从阵列中删除所有异常值?
可能的数组示例:
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,5,6,6,6,5,5,6,6,6,6,6,6,4,6 ,6,3,4,6,6,6,6,5,6,6,6,4,5,6,3,6,6,6,6,6,6,6,6,5,6,6,6 ,6,6,4,6,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,6,3 ,6,6,3,6,6,6,6,6,6,5,5,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;
})
}
答案 0 :(得分:0)
似乎您的内部数据值确实具有恒定的增量。因此,计算增量,采用模式并保持遵循该增量的值序列(达到适当的容差)。