435. Non-overlapping Intervals
Description
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.
Note that intervals which only touch at a point are non-overlapping. For example, [1, 2]
and [2, 3]
are 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:
1 <= intervals.length <= 105
intervals[i].length == 2
-5 * 104 <= starti < endi <= 5 * 104
Solutions
Solution 1: Sorting + Greedy
We first sort the intervals in ascending order by their right boundary. We use a variable \(\textit{pre}\) to record the right boundary of the previous interval and a variable \(\textit{ans}\) to record the number of intervals that need to be removed. Initially, \(\textit{ans} = \textit{intervals.length}\).
Then we iterate through the intervals. For each interval:
- If the left boundary of the current interval is greater than or equal to \(\textit{pre}\), it means that this interval does not need to be removed. We directly update \(\textit{pre}\) to the right boundary of the current interval and decrement \(\textit{ans}\) by one;
- Otherwise, it means that this interval needs to be removed, and we do not need to update \(\textit{pre}\) and \(\textit{ans}\).
Finally, we return \(\textit{ans}\).
The time complexity is \(O(n \times \log n)\), and the space complexity is \(O(\log n)\), where \(n\) is the number of intervals.
1 2 3 4 5 6 7 8 9 10 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|