地产建站规划,营销型企业网站的类型,做网站汉口,体彩网站建设读完本文#xff0c;你可以去力扣拿下如下题目#xff1a;56.合并区间-----------上篇文章用贪心算法解决了区间调度问题#xff1a;给你很多区间#xff0c;让你求其中的最大不重叠子集。其实对于区间相关的问题#xff0c;还有很多其他类型#xff0c;本文就来讲讲区间…读完本文你可以去力扣拿下如下题目56.合并区间-----------上篇文章用贪心算法解决了区间调度问题给你很多区间让你求其中的最大不重叠子集。其实对于区间相关的问题还有很多其他类型本文就来讲讲区间合并问题Merge Interval。LeetCode 第 56 题就是一道相关问题题目很好理解我们解决区间问题的一般思路是先排序然后观察规律。PS我认真写了 100 多篇原创手把手刷 200 道力扣题目全部发布在 labuladong的算法小抄持续更新。建议收藏按照我的文章顺序刷题掌握各种算法套路后投再入题海就如鱼得水了。一、思路一个区间可以表示为 [start, end]前文聊的区间调度问题需要按 end 排序以便满足贪心选择性质。而对于区间合并问题其实按 end 和 start 排序都可以不过为了清晰起见我们选择按 start 排序。显然对于几个相交区间合并后的结果区间 xx.start 一定是这些相交区间中 start 最小的x.end 一定是这些相交区间中 end 最大的。由于已经排了序x.start 很好确定求 x.end 也很容易可以类比在数组中找最大值的过程int max_ele arr[0];
for (int i 1; i arr.length; i) max_ele max(max_ele, arr[i]);
return max_ele;
二、代码# intervals 形如 [[1,3],[2,6]...]
def merge(intervals):if not intervals: return []# 按区间的 start 升序排列intervals.sort(keylambda intv: intv[0])res []res.append(intervals[0])for i in range(1, len(intervals)):curr intervals[i]# res 中最后一个元素的引用last res[-1]if curr[0] last[1]:# 找到最大的 endlast[1] max(last[1], curr[1])else:# 处理下一个待合并区间res.append(curr)return res
看下动画就一目了然了至此区间合并问题就解决了。本文篇幅短小因为区间合并只是区间问题的一个类型后续还有一些区间问题。本想把所有问题类型都总结在一篇文章但有读者反应长文只会收藏不会看… 所以还是分成小短文吧读者有什么看法可以在留言板留言交流。本文终希望对你有帮助。我的 在线电子书 有 100 篇原创文章手把手带刷 200 道力扣题目建议收藏对应的 GitHub 算法仓库 已经获得了 70k star欢迎标星