如果我有一个看起来像的数组
[0, 2, 4, 10, 10, 10, 10, 2, 5, 3, 2, 10, 10, 5, 7, 4, 10, 10, 10, 10]
10's
如果该序列至少出现3次,我该如何计算我们看到该序列的次数。
因此,在这种情况下,输出将是2
因为有2个10的顺序,每个连续有10个。
const values = [0, 2, 4, 10, 10, 10, 10, 2, 5, 3, 2, 10, 10, 5, 7, 4, 10, 10, 10, 10];
const MAX = 10;
const threshold = 3;
let count= 0;
let numberInSeq = 0;
values.forEach(x => {
if (x === MAX) {
numberInSeq++;
} else {
if (numberInSeq >= threshold) {
count++
}
numberInSeq = 0;
}
})
return count;
这是我目前拥有的,我相信它应该可以工作,但是我觉得有一种更优化的方法可以做到这一点。
谢谢!
forEach
循环中有一些小错误。如果当前值与检查值匹配(即MAX
您的情况),则需要检查阈值,如果达到阈值,则需要重置numberInSeq
阈值。这样可以正确计数序列。我还sequenceFound
为长序列添加了一个flagger变量,因此它们的计数不会超过一次。
这种方法的优势在于它是一次通过,这意味着在Big O表示法中,它仅是O(n)
复杂性,而不是多次通过解决方案。
var sequenceFound = false;
values.forEach(x => {
if (x === MAX) {
numberInSeq++;
if (numberInSeq >= threshold && sequenceFound === false) {
count++;
sequenceFound = true;
numberInSeq = 0;
}
} else {
numberInSeq = 0;
sequenceFound = false;
}
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句