给定一个区间的集合 intervals
,其中 intervals[i] = [starti, endi]
。返回 需要移除区间的最小数量,使剩余区间互不重叠 。
输入: intervals = [[1,2],[2,3],[3,4],[1,3]] 输出: 1 解释: 移除 [1,3] 后,剩下的区间没有重叠。
输入: intervals = [[1,2],[1,2],[1,2]] 输出: 2 解释: 你需要移除两个 [1,2] 来使剩下的区间没有重叠。
输入: intervals = [[1,2],[2,3]] 输出: 0 解释: 你不需要移除任何区间,因为它们已经是无重叠的了。
1 <= intervals.length <= 105
intervals[i].length == 2
-5 * 104 <= starti < endi <= 5 * 104
impl Solution {
pub fn erase_overlap_intervals(intervals: Vec<Vec<i32>>) -> i32 {
let mut intervals = intervals;
let mut stack = vec![];
intervals.sort_unstable();
for i in 0..intervals.len() {
let (start0, end0) = (intervals[i][0], intervals[i][1]);
let &(start1, end1) = stack.last().unwrap_or(&(0, start0));
if start0 >= end1 {
stack.push((start0, end0));
} else if end0 <= end1 {
stack.pop();
stack.push((start0, end0));
}
}
(intervals.len() - stack.len()) as i32
}
}