2017-06-06 168 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