删除被覆盖区间
https://leetcode-cn.com/problems/remove-covered-intervals/
排序并观察
依照惯例,按区间起点升序对区间排序,如果起点相同则按终点降序排序。
排序后,香菱区间的相对关系只有 3 个可能:
- 找到了覆盖的区间
- 区间相交,可以视作合并为一个更大的区间
- 区间不相交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| func removeCoveredIntervals(intervals [][]int) int { sort.Slice(intervals, func(i, j int) bool { if intervals[i][0] == intervals[j][0] { return intervals[i][1] > intervals[j][1] } else { return intervals[i][0] < intervals[j][0] } })
left, right := intervals[0][0], intervals[0][1] count := 0
for i := 1; i < len(intervals); i++ { if intervals[i][0] >= left && intervals[i][1] <= right { count++ }
if intervals[i][0] >= left && intervals[i][1] > right { right = intervals[i][1] }
if intervals[i][0] > right { left = intervals[i][0] right = intervals[i][1] } }
return len(intervals) - count }
|