Meeting Rooms
Problem (yeniden ifade)
Toplantı aralıkları [start, end] verildiğinde, bir kişinin hepsine katılıp katılamayacağını döndür (hiçbir iki toplantı örtüşmesin). Uç noktaların değmesi (end == next.start) izinlidir.
Sezgi
Herhangi iki toplantı örtüşüyorsa, başlangıca göre sıralama çatışmayı komşu bir çift olarak ortaya çıkarır.
Yaklaşımlar
Başlangıca göre sırala + komşu kontrolü
DoğrulanmadıFikir. Başlangıca göre sırala. Her ardışık çift için next.start < prev.end ise çatışma vardır.
Yürüyüş. [[0,30],[5,10],[15,20]] → sıralama sonrası 5 < 30 → false. [[7,10],[2,4]] → sıralı [[2,4],[7,10]] → 7 ≥ 4 → true.
Trade-off. Darboğaz sıralama. Olaylı sweep-line da çalışır ve Meeting Rooms II’ye genellenir.
export function canAttendMeetings(intervals: number[][]): boolean {
intervals = [...intervals].sort((a, b) => a[0]! - b[0]!);
for (let i = 1; i < intervals.length; i++) {
if (intervals[i]![0]! < intervals[i - 1]![1]!) return false;
}
return true;
}
export function canAttendMeetings(intervals: number[][]): boolean {
intervals = [...intervals].sort((a, b) => a[0]! - b[0]!);
for (let i = 1; i < intervals.length; i++) {
if (intervals[i]![0]! < intervals[i - 1]![1]!) return false;
}
return true;
}
Şablon bağlantısı
Merge Intervals’ın örtüşme-tespiti kardeşi. Aynı sırala-sonra-tara iskeleti; ilk çatışmada erken çık.
Yansıma
- Başlangıca göre sırala, komşuya bak. Bitişik
start == prev.endçakışma değil. <ile<=hangi çifti false yapar? Sıralamazsan uzak çiftler kaçar.- Tek toplantı true. Aynı anda başlayan iki toplantı false.