鏃ュ巻鏃堕棿娈靛悎骞剁畻娉曪細浼氳鍐茬獊妫€娴嬩笌蹇欑瑙嗗浘

涓€銆佷笟鍔″満鏅?/h2>

鍦ㄦ棩鍘嗗簲鐢ㄤ腑锛岄渶瑕佸皢澶氫釜閲嶅彔鎴栫浉閭荤殑鏃堕棿娈?/strong>鍚堝苟鎴愯繛缁殑"蹇欑鍖洪棿"锛岀敤浜庯細

  • 鏄剧ず鐢ㄦ埛鐨勫繖纰?绌洪棽鐘舵€?/li>
  • 妫€娴嬩細璁棰勭害鍐茬獊
  • 璁$畻鍙敤鏃堕棿绐楀彛

浜屻€侀棶棰樺畾涔?/h2>
杈撳叆锛氬涓棩绋嬩簨浠?(寮€濮嬫椂闂? 缁撴潫鏃堕棿)
(100, 300)  // 1:00-3:00
(115, 145)  // 1:15-1:45
(200, 400)  // 2:00-4:00
(500, 600)  // 5:00-6:00

杈撳嚭锛氬悎骞跺悗鐨勫繖纰屾椂娈?
(100, 400)  // 1:00-4:00 (鍓嶄笁涓悎骞?
(500, 600)  // 5:00-6:00 (鐙珛)

涓夈€佺粡鍏歌В娉曪細鎺掑簭 + 绾挎€у悎骞?/h2>
interface TimeSlot {
    start: number;
    end: number;
}

function mergeBusySlots(events: TimeSlot[]): TimeSlot[] {
    if (events.length === 0) return [];
    
    // 姝ラ1锛氭寜寮€濮嬫椂闂存帓搴?
    const sorted = [...events].sort((a, b) => a.start - b.start);
    
    // 姝ラ2锛氶亶鍘嗗悎骞?
    const merged: TimeSlot[] = [sorted[0]];
    
    for (let i = 1; i < sorted.length; i++) {
        const current = sorted[i];
        const lastMerged = merged[merged.length - 1];
        
        // 鍒ゆ柇鏄惁閲嶅彔鎴栫浉閭?
        if (current.start <= lastMerged.end) {
            // 鍚堝苟锛氭墿灞曠粨鏉熸椂闂?
            lastMerged.end = Math.max(lastMerged.end, current.end);
        } else {
            // 涓嶉噸鍙狅細鏂板鍖洪棿
            merged.push({...current});
        }
    }
    
    return merged;
}
馃挕 鍏抽敭鍒ゆ柇锛?/strong>褰撳墠鍖洪棿鐨勫紑濮嬫椂闂?鈮?涓婁竴涓悎骞跺尯闂寸殑缁撴潫鏃堕棿锛屽垯涓よ€呴噸鍙犲彲鍚堝苟銆?

鍥涖€佺畻娉曞浘瑙?/h2>
鎺掑簭鍚庯細
|----A----|
  |--B--|
      |------C------|
                           |---D---|

鍚堝苟杩囩▼锛?
1. A鍏ョ粨鏋? [A]
2. B涓嶢閲嶅彔锛屽悎骞? [A']  (A'鐨別nd鍙杕ax)
3. C涓嶢'閲嶅彔锛屽悎骞? [A'']
4. D涓嶢''涓嶉噸鍙狅紝鏂板: [A'', D]

浜斻€佸鏉傚害鍒嗘瀽

  • 鏃堕棿澶嶆潅搴?/strong>锛歄(n log n)锛屼富瑕佹槸鎺掑簭
  • 绌洪棿澶嶆潅搴?/strong>锛歄(n)锛屽瓨鍌ㄧ粨鏋?/li>

鍏€佹墿灞曞簲鐢?/h2>
  1. 浼氳瀹ゆ渶灏戞暟閲?/strong>锛氭壂鎻忕嚎绠楁硶缁熻鏈€澶у苟鍙?/li>
  2. 绌洪棽鏃舵鏌ユ壘锛氬悎骞跺悗鍙栬ˉ闆?/li>
  3. 澶氫汉鍏卞悓绌洪棽锛氬厛鍚堝苟姣忎汉蹇欑锛屽啀姹備氦闆嗙殑琛ラ泦
鍖洪棿鍚堝苟 鎺掑簭绠楁硶 鏃ョ▼绠$悊 璐績绠楁硶