435.无重叠区间
/**
* @param {number[][]} intervals
* @return {number}
*/
var eraseOverlapIntervals = function (intervals) {
// 贪心算法
// 移除区间数量最少=留下的不重叠区间最多=预订会议问题
// 先按右端点排序
// 为什么是右端点不是左端点?如果按照左端点排序,我们能找到最先开始的会议,但最先开始的会议不一定最先结束。
// 举个左端点排序的例子[[1,100],[2,10],[11,20],[21,30]]
// 如果以[1,100]为首个区间,最大不重叠区间数量为1;但是以[2,10]为首个区间,最大不重叠区间数量为3
intervals.sort((a, b) => a[1] - b[1])
let n = intervals.length
let right = intervals[0][1] // 安排第一个会议
let count = 1 // 会议数量
for (let i = 1; i < n; i++) {
// 如果下一个会议的开始时间比上一个要晚,则可以安排。即左端点大于等于上一个右端点
if (intervals[i][0] >= right) {
count++ // 会议数量+1
right = intervals[i][1] // 更新会议结束时间
}
}
// 剩下的就是要移除的数量
return n - count
};
// console.log(eraseOverlapIntervals([[1, 2], [2, 3], [3, 4], [1, 3]]))
// console.log(eraseOverlapIntervals([[1,2],[1,2],[1,2]]))
console.log(eraseOverlapIntervals([[1, 100], [11, 22], [1, 11], [2, 12]]))