2017-06-06 81 views
0

我正在尝试解决一个问题,我似乎无法将我的头围绕起来,并希望能从更有经验的人那里获得一点洞察比我。基本上,我有一个数组有10到500个值。这些值都是真或假,但它们是随机的。我需要知道连续出现错误的最大次数。例如:查找数组中最大数量的连续值(JS)

[false, false, true, false, true, false, true, false, false, false] 

应该返回3,因为它最多连续出现3次。这似乎是一个潜在的常见问题,但我无法通过搜索找到解决方案。任何帮助将不胜感激!

+3

你尝试过什么?如果你被卡住了 - 你会如何解决它?这通常是一个很好的起点。 – Damon

回答

4

您可以使用一个值来保持连续错误值的计数,如果该值较大,则将当前最大值设置为该值的最大值。如果值为true,则将计数器重置为0

var arr = [false, false, true, false, true, false, true, false, false, false] 
 
var c = 0, max = 0; 
 

 
arr.forEach(function(e) { 
 
    e == false ? c++ : c = 0; 
 
    if (c > max) max = c; 
 
}) 
 

 
console.log(max)

+0

这样做很有道理,看起来好像答案一直在我的鼻子下。非常感谢! –

+0

很高兴我能帮到你。 –

0
var yourArray=[false,true,true,false,false,false,true]; 
arrayLength = yourArray.length; 
var maxCount=0; 
var currentCount=0; 
var lastElement; 

for(var i = 0;i<arrayLength;i++){ 
    if(lastElement === yourArray[i]){ 
     currentCount++; 
    } 
    else{ 
     if(currentCount>maxCount){ 
      maxCount=currentCount; 
     } 
     currentCount=1; 
    } 
    lastElement=yourArray[i]; 
} 
console.log(maxCount); 

这应该满足您的需求

1

你可以简单地使用forEach功能,然后有一个内部计数器,例如:

console.log(countConsecutive([false, false, true, false, true, false, true, false, false, false])); 
 

 
function countConsecutive(arr) 
 
{ 
 
    var c = 0; 
 
    
 
    arr.forEach(function(e) { 
 
    (e == false) ? c++ : c = 0; 
 
    }); 
 
    
 
    return c; 
 
}

1

如果你想要一个更简洁的解决方案,你可以使用reduce

const arr = [false, false, true, false, true, false, true, false, false, false] 
arr.reduce((memo, el) => el ? 0 : memo + 1, 0) 
1

试试这个函数来计算阵列的连续false数:

function countNumFalse(arr){ 
    var max = 0; 
    var condFalse = false; 
    var numFalse = 0; 
    for (var i = 0; i < arr.length; i++) { 
     condFalse = condFalse || arr[i]; 
     if(condFalse === true){ 
      condFalse = false; 
      numFalse = 0; 
     } 
     else{ 
      numFalse++; 
      if(numFalse > max){ 
      max = numFalse; 
      } 
     } 
    } 
    return max; 
} 

var arr1 = [false, false, true, false, true, false, true, false, false, false]; 

countNumFalse(arr1); 
3