• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Najdluzszy spojny podciag o sumie 4

Object Storage Arubacloud
0 głosów
1,451 wizyt
pytanie zadane 16 września 2018 w C i C++ przez jjanickij Użytkownik (510 p.)
Witam!

Jak w temacie. Niestety wgl nie mam pomyslu jak sie do tego zabrac.

Ogolnie zadanko łatwe gdyby nie liczby ujemne.

Dla przykladu:

3 -2 6 1 -1 5

wynik = 4

Jest tak bo mamy dwa spojne podciagi o sumie 4:

-2 6

-2 6 1 -1

ale najdluszy ma dlugosc 4 (nasz wynik)

Mialem pomysl zeby zrobic sumy prefiksowe ale dalej nie mam pojecia co z nimi zrobic ;/

1 odpowiedź

+1 głos
odpowiedź 17 września 2018 przez Patrycjerz Mędrzec (192,320 p.)

Nie wiem, czy mój algorytm jest najoptymalniejszy, bo wymyśliłem go na szybko, ale powinien rozwiązać zadanie. Otóż:

  1. 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.
  2. 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ść.
  3. Gdy zsumujesz wszystkie liczby ciągu (od pierwszej do ostatniej), zaczynasz dodawanie od drugiej i znowu idziesz do końca.
  4. 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
komentarz 17 września 2018 przez jjanickij Użytkownik (510 p.)
Dzieki, ale jest to złozonosc n kwadrat

A zaley mi na zlozonosci w granicach n do nlong ;/

Tak na bruta to tez potrafie zrobic ;p

Podobne pytania

0 głosów
2 odpowiedzi 524 wizyt
pytanie zadane 28 grudnia 2020 w C i C++ przez gryzedywany Użytkownik (510 p.)
0 głosów
3 odpowiedzi 732 wizyt
0 głosów
1 odpowiedź 194 wizyt

92,572 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...