Coding Interview Prep · Lekcja

Wybór aktywności według najwcześniejszego zakończenia

Planowanie największej liczby niepokrywających się wydarzeń

Lekcja 2 z 413 kroki

Wybór aktywności według najwcześniejszego zakończenia to bezpłatna lekcja Coding Interview Prep na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Coding Interview Prep, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Coding Interview Prep zawiera 4 lekcji w sumie.

Problem planowania

Mając wydarzenia z godzinami rozpoczęcia i zakończenia, wybór aktywności polega na znalezieniu największej liczby wydarzeń, w których można uczestniczyć bez nakładania się dwóch z nich. 📅

Nakładanie się oznacza konflikt

Dwie aktywności kolidują, jeśli jedna rozpoczyna się przed zakończeniem drugiej. Z każdej nakładającej się pary można wybrać tylko jedno wydarzenie.

Zwycięska reguła

Klucz zachłanny polega na tym, aby zawsze wybierać spośród dostępnych wydarzeń to, które kończy się najwcześniej. Wczesne zakończenie pozostawia najwięcej miejsca na kolejne wydarzenia.

Sortowanie według czasu zakończenia

Najpierw należy posortować wszystkie aktywności według czasu zakończenia. Następnie najlepszym kolejnym wyborem jest po prostu pierwsza aktywność w tej kolejności, która pasuje.

events.sort(key=lambda e: e[1])

Śledzenie ostatniego zakończenia

Należy przechowywać jedną zmienną z czasem zakończenia ostatnio wybranej aktywności. Każde nowe wydarzenie musi rozpocząć się w tej chwili lub później, aby było zgodne z wyborem.

last_end = -1

Jedno przejście i wybór

Należy przejść raz po posortowanej liście. Jeśli wydarzenie rozpoczyna się w chwili last_end lub później, należy je wybrać i zaktualizować last_end do czasu jego zakończenia.

for s, f in events:
    if s >= last_end:
        count += 1
        last_end = f

Działa w czasie n log n

Koszt stanowi sortowanie o złożoności O(n log n), po którym następuje jedno liniowe przejście. To wystarczająco szybko nawet dla bardzo dużych danych wejściowych w zawodach.

Dlaczego wygrywa najwcześniejsze zakończenie

Najwcześniejsze zakończenie najszybciej zwalnia oś czasu, dlatego nie może zablokować lepszego planu. Zastąpienie nim dowolnego wyboru w optymalnym harmonogramie nie pogarsza rozwiązania.

Najwcześniejsze rozpoczęcie zawodzi

Wybór według najwcześniejszego rozpoczęcia może wskazać jedno długie wydarzenie, które zajmie cały dzień. Sama długość również bywa myląca, dlatego należy kierować się czasem zakończenia.

Obsługa stykających się granic

Należy ustalić, czy wydarzenie kończące się dokładnie wtedy, gdy inne się rozpoczyna, uznaje się za kolizję. Warunek s >= last_end pozwala na wydarzenia następujące bezpośrednio po sobie.

Częsty schemat zadań konkursowych

Ten schemat kryje się za wieloma zadaniami: rezerwacją sal, oglądaniem programów lub uruchamianiem zadań. Gdy zostanie rozpoznany, można zastosować regułę najwcześniejszego zakończenia.

Szybki test

Należy znaleźć maksymalną liczbę niepokrywających się aktywności.

Podsumowanie

Należy posortować aktywności według czasu zakończenia, a następnie wybierać każdą, która rozpoczyna się po zakończeniu ostatniej wybranej. Jedno sortowanie i jedno przejście dają maksymalny zbiór. 🚀

Bezpłatny start

Ucz się Coding Interview Prep dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
90
Lekcje
360

Często zadawane pytania

Czy lekcja „Wybór aktywności według najwcześniejszego zakończenia” jest bezpłatna?

Tak — pełny tekst „Wybór aktywności według najwcześniejszego zakończenia” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Coding Interview Prep, przejdź na CoddyKit PRO. Kurs Coding Interview Prep zawiera 4 lekcji w sumie.

Co nauczysz się w „Wybór aktywności według najwcześniejszego zakończenia”?

Planowanie największej liczby niepokrywających się wydarzeń Ćwiczysz Coding Interview Prep z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Coding Interview Prep?

Nie wymagamy żadnego doświadczenia. Coding Interview Prep w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Wybór aktywności według najwcześniejszego zakończenia”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Coding Interview Prep?

Tak. Każda lekcja Coding Interview Prep zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Sposób myślenia zachłannego
  2. Wybór aktywności według najwcześniejszego zakończenia
  3. Plecak ułamkowy według ilorazu
  4. Rozpoznawanie, kiedy zachłanność zawodzi
← Powrót do Coding Interview Prep