Hej!
W ostatnim czasie szlifuje swoje umiejętności wraz ze stroną CodeSignal.
Po wykonaniu kilku pierwszych zadań bez większych problemów natrafiłem na zadanie które sprawia mi zakłopotanie.
Treść zadania:
Zrobić funkcję która jako argument dostaje tablicę INT i sprawdza czy istnieje tam sekwencja rosną tzn. a0 < a1 < a2 < ... < an, można usunąć jeden element z tablicy.
Czyli sekwencja
{1, 2, 4, 3} jest sekwencją bo można usunąć 4.
{1, 2, 4, 4, 5, 4} nie jest, ponieważ mimo usunięcia jednego elementu nie uzyskamy sekwencji.
Rozwiązałem to zadania już na dwa sposoby, pierwszy -> błędny który przeszedł tylko 16 testów na 19.
Drugi sposób (aktualny, lepszego nie wymyśliłem) rozwiązuje 34 na 38 testów. Wymyśliłem bardzo słaby algorytm(pod względem optymalizacji).
Algorytm:
Sprawdza czy tablica (bez usunięcia elementów) jest sekwencją - > jeżeli tak to koniec zadania -> jeżeli nie -> kopiuje tablice do tablicy pomocniczej -> usuwa 0 element - > cofa się do pkt 1. -> jeżeli nie -> usuwa 1 element... -> cofa się do pkt 1. -> jeżeli nie usuwa n-ty element -> ...
Algorytm działa, jednak max czasu na wykonanie pracy programu to 3 sekundy. Na 35 przykładzie wywala się bo tablica jest za duża a ten program jest tak słabo wydajny, że więcej czasu by mu to zajęło.
Ktoś ma jakiś pomysł na wydajniejszy algorytm :D?