贪心:区间问题(活动选择与合并)
一、面试常考点
1. 活动选择为什么按结束时间排序
结束越早,给后续区间留出的空间越大。
2. 合并区间的关键
先按起点排序,再线性合并重叠段。
二、细节介绍
1. 最多不重叠区间
按结束时间升序,能选就选。
2. 最少删区间
总区间数 - 最多不重叠数。
三、示例代码
function eraseOverlapIntervals(intervals) {
intervals.sort((a, b) => a[1] - b[1])
let count = 1
let end = intervals[0][1]
for (let i = 1; i < intervals.length; i++) {
if (intervals[i][0] >= end) {
count++
end = intervals[i][1]
}
}
return intervals.length - count
}
四、常用应用场景
1. 会议室排期
最少冲突安排。
2. 广告位时间片调度
收益最大化/冲突最小化。