1288. Remove Covered Intervals

124 阅读1分钟

leetcode.com/problems/re…

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 <= 1000
  • intervals[i].length == 2
  • 0 <= 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
}