İçeriğe atla
CodeItRaw
Sıralama

Ders 5/5

Bir aralık iki sayıdır: başlangıç ve bitiş (bir toplantı, bir rezervasyon). Aralıklarla ilgili soruların neredeyse hepsi aynı adımla başlar: başlangıca göre sırala. Sıraladıktan sonra bir aralık yalnızca kendisinden hemen öncekiyle çakışabilir ya da çakışmaz; uzaktakilere bakmana gerek kalmaz.

ordered = sorted(intervals)
blocks = [ordered[0][:]]
for start, end in ordered[1:]:
if start <= blocks[-1][1]:
blocks[-1][1] = max(blocks[-1][1], end)
else:
blocks.append([start, end])
Çakışan aralıkları birleştirmek: yeni aralık son bloğun bitişinden önce (ya da tam o anda) başlıyorsa bloğu uzatır, değilse yeni bir blok açar. max şarttır: içteki kısa aralık, bloğun bitişini geri çekmemelidir.

"Çakışma var mı?" sorusu bunun daha basit hâlidir: sıralı listede bir aralık, bir öncekinin bitişinden önce başlıyorsa çakışma vardır. Liste çiftlerini sıralamak kendiliğinden önce başlangıca, eşitlikte bitişe bakar.

Görevler

Görevler sırayla açılır. Hepsini çözünce sonraki ders açılır.

Bu dersin görevleri, önceki dersler bitince açılır. Anlatımı şimdiden okuyabilirsin.

  1. 01

    Takvim Çakışması

    Fonksiyon

  2. 02

    Aralık Birleştir

    Fonksiyon

  3. 03

    Takvim Blokları

    Fonksiyon

Sırayı beklemeden çözmek istersen bütün problemler kilitsiz açık: Problemler listesi