赞
踩
给定一个区间的集合 intervals ,其中 intervals[i] = [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。
输入: intervals = [[1,2],[2,3],[3,4],[1,3]]
输出: 1
解释: 移除 [1,3] 后,剩下的区间没有重叠。
将数组按照左边界或者右边界从小到大排序,目的是为了将容易重叠的区间放在一块,本题解采用左边界排序。采取以下贪心策略:

class Solution { public int eraseOverlapIntervals(int[][] intervals) { Arrays.sort(intervals, (a, b) -> { return Integer.compare(a[0], b[0]); }); int ans = 0; for(int i = 1; i < intervals.length; i++) { // 当前左边界大于等于上个右边界,表示两个区间不重叠 if(intervals[i][0] >= intervals[i-1][1]) { } else { // 两个区间重叠 ans++; // 更新右边界最小值 intervals[i][1] = Math.min(intervals[i][1], intervals[i-1][1]); } } return ans; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。