涓€銆佷笟鍔″満鏅?/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>
- 浼氳瀹ゆ渶灏戞暟閲?/strong>锛氭壂鎻忕嚎绠楁硶缁熻鏈€澶у苟鍙?/li>
- 绌洪棽鏃舵鏌ユ壘锛氬悎骞跺悗鍙栬ˉ闆?/li>
- 澶氫汉鍏卞悓绌洪棽锛氬厛鍚堝苟姣忎汉蹇欑锛屽啀姹備氦闆嗙殑琛ラ泦
杈撳叆锛氬涓棩绋嬩簨浠?(寮€濮嬫椂闂? 缁撴潫鏃堕棿)
(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 (鐙珛)
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>
- 浼氳瀹ゆ渶灏戞暟閲?/strong>锛氭壂鎻忕嚎绠楁硶缁熻鏈€澶у苟鍙?/li>
- 绌洪棽鏃舵鏌ユ壘锛氬悎骞跺悗鍙栬ˉ闆?/li>
- 澶氫汉鍏卞悓绌洪棽锛氬厛鍚堝苟姣忎汉蹇欑锛屽啀姹備氦闆嗙殑琛ラ泦
鎺掑簭鍚庯細
|----A----|
|--B--|
|------C------|
|---D---|
鍚堝苟杩囩▼锛?
1. A鍏ョ粨鏋? [A]
2. B涓嶢閲嶅彔锛屽悎骞? [A'] (A'鐨別nd鍙杕ax)
3. C涓嶢'閲嶅彔锛屽悎骞? [A'']
4. D涓嶢''涓嶉噸鍙狅紝鏂板: [A'', D]
- 浼氳瀹ゆ渶灏戞暟閲?/strong>锛氭壂鎻忕嚎绠楁硶缁熻鏈€澶у苟鍙?/li>
- 绌洪棽鏃舵鏌ユ壘锛氬悎骞跺悗鍙栬ˉ闆?/li>
- 澶氫汉鍏卞悓绌洪棽锛氬厛鍚堝苟姣忎汉蹇欑锛屽啀姹備氦闆嗙殑琛ラ泦