LeetCode 56. Merge Intervals
原题链接在这里:https://leetcode.com/problems/merge-intervals/
题目:
Given a collection of intervals, merge all overlapping intervals.
For example,
Given [1,3],[2,6],[8,10],[15,18]
,
return [1,6],[8,10],[15,18]
.
题解:
首先sort list 中的interval. 然后比较 前一个 interval的end是否 >= 后一个interval 的start, 若是,则合并这两个interval, 用来和下一个比较。若不是,则把这段interval 加到res中去。
通过本题见到了如何改写Comparator, 参见了这篇文章:http://www.blogjava.net/yesjoy/articles/126046.html 从Comparator Interface implement 出一个class, 定义了interval的比较方法。
Note: 注意corner case, 若是pre的end 和 下一个的start 相等,也是要合并的。
Time Complexity: O(n*logn). n是List<Interval> intervals 的长度,排序用了O(nlogn). 之后只走了一遍list, 用了O(n), 一共是 O(n*logn).
Space: O(n). 是res的大小.
AC Java:
1 /** 2 * Definition for an interval. 3 * public class Interval { 4 * int start; 5 * int end; 6 * Interval() { start = 0; end = 0; } 7 * Interval(int s, int e) { start = s; end = e; } 8 * } 9 */ 10 public class Solution { 11 public List<Interval> merge(List<Interval> intervals) { 12 List<Interval> res = new ArrayList<Interval>(); 13 if(intervals == null || intervals.size() == 0){ 14 return res; 15 } 16 17 //排序 18 Collections.sort(intervals, new Comparator<Interval>(){ 19 public int compare(Interval i1, Interval i2){ 20 if(i1.start == i2.start){ 21 return i1.end-i2.end; 22 } 23 return i1.start - i2.start; 24 } 25 }); 26 27 Interval pre = intervals.get(0); 28 for(int i = 1; i<intervals.size(); i++){ 29 Interval cur = intervals.get(i); 30 if(pre.end >= cur.start){ 31 pre.end = Math.max(pre.end, cur.end); 32 }else{ 33 res.add(pre); 34 pre = cur; 35 } 36 } 37 38 //最后要加上最后一段interval 39 res.add(pre); 40 return res; 41 } 42 }
类似Insert Interval, Add Bold Tag in String, Partition Labels, Meeting Rooms, Meeting Rooms II, Range Module, Interval List Intersections.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 通过一个DEMO理解MCP(模型上下文协议)的生命周期
· MySQL下200GB大表备份,利用传输表空间解决停服发版表备份问题
· 记一次 .NET某固高运动卡测试 卡慢分析
· 微服务架构学习与思考:微服务拆分的原则
· 记一次 .NET某云HIS系统 CPU爆高分析
· 7 个最近很火的开源项目「GitHub 热点速览」
· DeepSeekV3:写代码很强了
· MySQL下200GB大表备份,利用传输表空间解决停服发版表备份问题
· Visual Studio 2022 v17.13新版发布:强化稳定性和安全,助力 .NET 开发提
· AI浏览器自动化实战