ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

LeetCode 435. 无重叠区间

2019-08-14 17:42:46  阅读:341  来源: 互联网

标签:重叠 minEnd intervals result 区间 435 我们 LeetCode 起始值


这道题目是在给定的集合中找到需要去掉的区间最小数量,使得剩余区间互相不重叠,题目如下:
题目
这道题目似乎无从下手,因为找重叠的区域确实是比较麻烦的。我们可以尝试用贪心算法来解答这个问题,我们假设有集合:intervals=[[1,2],[3,5],[2,3],[3,6],[7,8],[6,7]]intervals=[[1,2],[3,5],[2,3],[3,6],[7,8],[6,7]]intervals=[[1,2],[3,5],[2,3],[3,6],[7,8],[6,7]]
我们来用这个集合为例用贪心的思想来解决这道题目:
1
首先,我们将这个集合里面每个元素的尾部,也就是区间的尾部进行排序操作:
2
然后我们标记最小的区间的结束值,记为 minEnd;然后标记此时集合中不重合区间的个数,记为 result,那么有:
3
然后我们遍历集合中的区间元素,我们将区间的起始值和当前的最小区间结束值 minEnd 进行比较,如果起始值比 minEnd 要小,那么就可以说明这两个区间重合了。我们这里比较第二个区间 [2,3] 中的起始值2和当前的最小结束值 minEnd = 2, 此时区间的起始值没有比 minEnd 小,那么我们更新 result 和 minEnd 分别为2和3:
4
同理,我们再更新一步:
5
这个时候来了一个区间 [3,6][3,6][3,6],起始值是3,比此时的 minEnd 小,那么我们不管这个区间,把它去掉:
6
再来,同样的道理,我们可以继续更新:
7
8
这个时候我们不重叠的区间就有result=5个,所以我们需要去掉的区间是[3,6][3,6][3,6],最终我们将整个集合的长度减去不重叠区间的长度就是要去掉的空间数了。逻辑清晰之后我们就可以上代码了:

class Solution(object):
    def eraseOverlapIntervals(self, intervals):
        """
        :type intervals: List[List[int]]
        :rtype: int
        """
        if not len(intervals):
            return 0
        # 以尾部将区间进行排序
        intervals.sort(key=lambda k:k[1])
        # 初始化result 和 minEnd
        minEnd = intervals[0][1]
        result = 1
        for i in range(1, len(intervals)):
        	# 比较区间头部和 minEnd,小的话就直接去掉,大于的话就不重叠,更新result 和 minEnd
            if intervals[i][0] < minEnd:
                continue
            result += 1
            minEnd = intervals[i][1]
        return len(intervals) - result

这其实也是一个贪心的思想,希望通过这个题目能够帮助大家对贪心思想有更全面的认识,谢谢。

标签:重叠,minEnd,intervals,result,区间,435,我们,LeetCode,起始值
来源: https://blog.csdn.net/Oscar6280868/article/details/99585317

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有