Given an array intervals where intervals[i] = [li, ri] represent the interval [li, ri), remove all intervals that are covered by another interval in the list.
The interval [a, b) is covered by the interval [c, d) if and only if c <= a and b <= d.
Return the number of remaining intervals.
Example 1:
Input: intervals = [[1,4],[3,6],[2,8]]
Output: 2
Explanation: Interval [3,6] is covered by [2,8], therefore it is removed.
Example 2:
Input: intervals = [[1,4],[2,3]]
Output: 1
Constraints:
1 <= intervals.length <= 1000intervals[i].length == 20 <= li <= ri <= 105- All the given intervals are unique.
解答
对数组进行排序,左边界升序排序,右边界降序排序,然后遍历数组,判断当前区间e是否被前一个区间覆盖即可。
func removeCoveredIntervals(intervals [][]int) int {
sort.Slice(intervals, func(i, j int) bool {
if intervals[i][0] < intervals[j][0] {
return true
} else if intervals[i][0] > intervals[j][0] {
return false
} else {
return intervals[i][1] >= intervals[j][1]
}
})
res := len(intervals)
left := intervals[0][0]
right := intervals[0][1]
for i := 1; i < len(intervals); i++ {
e := intervals[i]
if e[0] >= left && e[1] <= right{
res--
}else {
left = e[0]
right = e[1]
}
}
return res
}