2017-06-06 2 views
0

Ich versuche ein Problem zu lösen, das mich nicht umhauen lässt und hoffte, dass ich von jemandem mit mehr Erfahrung ein wenig Einblick bekommen könnte als ich bin. Grundsätzlich habe ich ein Array mit 10 bis 500 Werten. Diese Werte sind entweder wahr oder falsch, aber sie sind in einer zufälligen Reihenfolge. Ich muss wissen, wie oft False hintereinander erscheint. Zum Beispiel:Suche nach der größten Anzahl aufeinanderfolgender Werte in einem Array (JS)

Sollte 3 zurückgeben, da es höchstens dreimal in Folge erscheint. Dies scheint ein potentiell häufiges Problem zu sein, das ich lösen könnte, aber ich konnte keine Lösung durch Suchen finden. Jede Hilfe würde sehr geschätzt werden!

+3

Was haben Sie versucht? Wenn du feststeckst - wie würdest du es von Hand lösen? Das ist normalerweise ein guter Ausgangspunkt. – Damon

Antwort

4

Sie können einen Wert verwenden, um die Anzahl aufeinanderfolgender falscher Werte zu zählen, und wenn dieser Wert größer ist als der aktuelle max. Gesetzte Maximalwert für diesen Wert. Wenn der Wert true ist, setzen Sie den Zähler auf 0 zurück.

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

Das macht sehr viel Sinn, scheint die Antwort die ganze Zeit unter meiner Nase zu sein. Sehr geschätzt! –

+0

Ich bin froh, dass ich helfen konnte. –

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); 

Dies sollte Ihre Bedürfnisse

1

Sie passen einfach die forEach Funktion nutzen zu können, und dann einen internen Zähler, zum Beispiel:

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

Wenn Sie eine prägnante Lösung wollen, können Sie reduce

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

diese Funktion Versuchen Anzahl von aufeinanderfolgenden false in Reihe zählen:

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 
Verwandte Themen