435. Non-overlapping Intervals
Given an array of intervals intervals
where intervals[i] = [starti, endi]
, return the minimum number of intervals you need to remove to make the rest of the intervals non-overlapping.
Example 1:
Input: intervals = [[1,2],[2,3],[3,4],[1,3]]
Output: 1
Explanation: [1,3] can be removed and the rest of the intervals are non-overlapping.
Example 2:
Input: intervals = [[1,2],[1,2],[1,2]]
Output: 2
Explanation: You need to remove two [1,2] to make the rest of the intervals non-overlapping.
Example 3:
Input: intervals = [[1,2],[2,3]]
Output: 0
Explanation: You don't need to remove any of the intervals since they're already non-overlapping.
Constraints:
intervals.length
<= 105intervals[i].length
== 2starti
< endi
<= 5 * 104function eraseOverlapIntervals(intervals) {
intervals.sort((a, b) => a[1] - b[1]); // 依結束時間排序
let count = 0;
let end = intervals[0][1];
for (let i = 1; i < intervals.length; i++) {
const [curStart, curEnd] = intervals[i];
if (curStart < end) {
count++;
} else {
end = curEnd;
}
}
return count;
}
MarsgoatJul 19, 2023
class Solution:
def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:
n = len(intervals)
intervals.sort(key=lambda x: x[1])
ans, pre = 0, float('-inf')
for start, end in intervals:
if start < pre:
ans += 1
else:
pre = end
return ans
Yen-Chi ChenWed, Jul 19, 2023