不重叠的区间。这题又是用到扫描线的思想。题意是给了一组intervals,求至少需要删除几个interval就能使得最后的结果集中没有重叠。

既然是找是否有重叠,那么可以根据每个interval的end对input进行排序。排序之后遍历intervals,记录不重叠的interval一共有几个(记为count),然后用intervals的总长度L - count得到最后要的结果。

时间O(nlogn)

空间O(1)

 1 /**
 2  * @param {number[][]} intervals
 3  * @return {number}
 4  */
 5 var eraseOverlapIntervals = function(intervals) {
 6     // corner case
 7     if (intervals.length === 0) {
 8         return 0;
 9     }
10
11     // normal case
12     intervals = intervals.sort((a, b) => a[1] - b[1]);
13     let end = intervals[0][1];
14     let count = 1;
15     for (let i = 1; i < intervals.length; i++) {
16         if (intervals[i][0] >= end) {
17             end = intervals[i][1];
18             count++;
19         }
20     }
21     return intervals.length - count;
22 };
01-02 22:53