Nie wiem, czy mój algorytm jest najoptymalniejszy, bo wymyśliłem go na szybko, ale powinien rozwiązać zadanie. Otóż:
- Posiadasz zmienną oznaczającą długość najdłuższego podciągu o sumie 4. Na początku niech posiada neutralną wartość -1, czyli brak podciągu.
- Zaczynasz sprawdzać sumę liczb od pierwszej, sukcesywnie dodając kolejne. Gdy dojdziesz do sumy równej 4, sprawdzasz, czy długość aktualnego podciągu jest większa od długości maksymalnej. Jeśli tak, aktualizujesz wartość, jeśli nie, pomijasz tę czynność.
- Gdy zsumujesz wszystkie liczby ciągu (od pierwszej do ostatniej), zaczynasz dodawanie od drugiej i znowu idziesz do końca.
- Algorytm kończy się, gdy obliczysz i sprawdzisz wartość ostatniej liczby (podciąg jednoelementowy).
Oto prosty pseudokod:
maxLength = -1;
for i = 0; i < N; i++
do
sum = 0;
for j = i; j < N; j++
do
if i != j
then
sum = sum + numbers[j];
elseif i == j
then
sum = numbers[j];
end
actualLength = j - i + 1;
if sum == 4 and actualLength > maxLength
then
maxLength = actualLength;
end
end
end