2016-12-04 28 views
6

Próbuję policzyć najdłuższy ciąg kolejnych rosnących elementów w losowo wygenerowanej tablicy MOODS. Ten kod zawsze zwraca jeden mniej niż jest prawidłowy.Policz rosnące elementy w tablicy

int maxDays = 0; 
    int days = 0; 
    for (int i = 0; i < MOODS.size() - 1; i++) { 
     if (MOODS.get(i + 1) > MOODS.get(i)) { 
      days += 1; 
     if(days>maxDays){ 
      maxDays=days; 
     } 
     } else { 
      days = 0; 
     } 

    } 
    return maxDays; 
} 
+2

myślę, że ignorować faktu, że kiedy MOODS.get (i + 1)> MOODS.get (i) po raz pierwszy, kiedy dni = 0, rosnąca kolejność strun ma długość dwóch . Napraw to i powinno działać. –

+0

Och, człowieku, tyle czasu spędziłem waląc głową w ten błąd ... Dziękuję bardzo. – olwatshisface

+0

Serdecznie zapraszamy :). Kod w odpowiedzi rozwiąże problem i obsłuży specjalny przypadek MOODS.size() = 0. –

Odpowiedz

5

Zawsze będziesz mieć co najmniej jedną rosnącą sekwencję ciągów o długości 1. Po prostu zmień dni na 1 i to zadziała.

int maxDays = Math.min(1, MOODS.size()); 
int days = 1; 
for (int i = 0; i < MOODS.size() - 1; i++) { 
    if (MOODS.get(i + 1) > MOODS.get(i)) { 
     days += 1; 
     if (days>maxDays){ 
      maxDays=days; 
     } 
    } else { 
     days = 1; 
    } 
} 
return maxDays; 
+1

Jest jeszcze jeden problem. Co się dzieje, gdy 'MOODS.size()' ma tylko '1'? lub '0'? – 4castle

+0

Tak, w ogóle nie wejdzie w pętlę for. Ustawienie maxDays na 1 to naprawi. –

+1

'int maxDays = Math.min (1, MOODS.size());' powinien również naprawić, gdy rozmiar wynosi '0'. – 4castle