Wpis z mikrobloga

Dziś zadanie od Snapchat.

Mając podaną tablicę przedziałów czasowych (początek, koniec), w których odbywają się wykłady, określ minimalną liczbę sal potrzebnych do przeprowadzenia wszystkich wykładów.

np. dla [(30, 75), (0, 50), (60, 150)] właściwa odpowiedź to 2.

#dailycodingproblem #programowanie
  • 31
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@NotABigFan: Mam taki pomysł:
-Załóżmy, że rezerwować czas można z dokładnością co do 5 minut, jeśli jest potrzeba co do minuty to można zmodyfikować algorytm ale zajmie więcej czasu i pamięci.
-Robimy tablice timeline'u (np. index 0 to 0 min, index 1 to 5 minuta, index 2 to 10 minuta itd) w którą wstawiamy moment rozpoczęcia i zakończenia wykładu.
-Następnie lecimy od początku do końca tej tablicy i trzymamy zmienną
  • Odpowiedz
Można to w sumie uprościć i nawet nie trzymać całego timeline'u, a same kluczowe momenty (rozpoczęcie, zakończenie).


@ptasigryp: istotne sa tylko gapy
nakładające się okresy
maksymlana ilość gapów w tym samym momencie oznacza ilość sal
  • Odpowiedz
@NotABigFan: Posortować algorytmem z n*logn, następnie robić przejście z lewej do prawej na dwóch indexach (miało to jakąś profesjonalną nazwę).
Index j wyprzedza index i, zlicza następne rezerwacje które mają otwarcie <= zamknięciu rezerwacji na indexie i, gdy natrafi na coś późniejszego to i++, j leci dalej sprawdzając czy coś następnego otwiera się przed zamknięciem.

Nie mam teraz głowy do zakodowania tego i nie wiem czy ten pomysł nie padnie
  • Odpowiedz