leetcode 1288. Remove Covered Intervals (python)

354 阅读1分钟

描述

Given a list of intervals, remove all intervals that are covered by another interval in the list.

Interval [a,b) is covered by interval [c,d) if and only if c <= a and b <= d.

After doing so, 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

Example 3:

Input: intervals = [[0,10],[5,12]]
Output: 2

Example 4:

Input: intervals = [[3,10],[4,10],[5,11]]
Output: 2

Example 5:

Input: intervals = [[1,2],[1,4],[3,4]]
Output: 1

Note:

1 <= intervals.length <= 1000
intervals[i].length == 2
0 <= intervals[i][0] < intervals[i][1] <= 10^5
All the intervals are unique.

解析

根据题意,只是相当于将大的 interval 把在其范围内的小的 interval 都吞并了,最后对剩下的 interval 进行计数。首先要对 intervals 按照第一个元素(即每个 interval 的左边界)进行升序排序,如果第一个元素相等则按照第二个元素(即每个 interval 的右边界)进行升序排列,然后遍历所有 intervals ,然后对下面三种情况进行判断:

  • 如果 intervals[i] 的左边界和 intervals[i-1] 的左边界相等,说明 intervals[i] 包含 intervals[i-1] ,可以将 intervals[i-1] 去掉
  • 如果 intervals[i] 的右边界小于等于 intervals[i-1] 的右边界,说明 intervals[i-1] 包含 intervals[i] ,可以将 intervals[i] 去掉
  • 如果 intervals[i] 的右边界大于 intervals[i-1] 的右边界,说明 intervals[i-1] 和 intervals[i] 交叉,不管。

最后对 intervals 剩下的元素进行计数即可。

解答

class Solution(object):
    def removeCoveredIntervals(self, intervals):
        """
        :type intervals: List[List[int]]
        :rtype: int
        """
        intervals.sort()
        n = len(intervals)
        res = 1
        i=1
        while i<n:
            if intervals[i][0] == intervals[i-1][0]:
                intervals.remove(intervals[i-1])
                n-=1
            elif  intervals[i][1] <= intervals[i-1][1]:
                intervals.remove(intervals[i])
                n-=1
            elif intervals[i][1] > intervals[i-1][1]:
                res+=1
                i+=1
        return res
        	      
		

运行结果

Runtime: 80 ms, faster than 46.02% of Python online submissions for Remove Covered Intervals.
Memory Usage: 14.1 MB, less than 15.04% of Python online submissions for Remove Covered Intervals.

原题链接:leetcode.com/problems/re…

您的支持是我最大的动力