返回首页

贪心:区间问题(活动选择与合并)

一、面试常考点

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. 广告位时间片调度

收益最大化/冲突最小化。