leetcode56. 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]
.
解题思路:
1)将集合进行排序;
集合的排序建议使用Collections的sort方法实现,需要自己实现Comparator接口;
2)依次进行归并,当后者的start大于当前Interval的end时,将当前Interval加入到集合中,否则将当前Interval和后者Interval进行归并
注意:边界条件的判断
代码:
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 11 12 public class Solution { 13 public List<Interval> merge(List<Interval> intervals) { 14 //处理特殊情况 15 if(intervals == null || intervals.size() <2 ){ 16 return intervals; 17 } 18 19 //集合排序 20 ComparatorImpl com = new ComparatorImpl(); 21 Collections.sort(intervals,com); 22 23 //归并 24 List<Interval> temp = new ArrayList<Interval>(); 25 Interval val = intervals.get(0); 26 Interval next; 27 boolean flag = true; 28 for(int i=1; i<intervals.size();){ 29 next = intervals.get(i); 30 flag = true; 31 if(next.start > val.end){ 32 temp.add(val); 33 val = next; 34 flag = false; 35 }else{ 36 //进行一次归并,i自增一次 37 val.end = Math.max(val.end,next.end); 38 i++; 39 } 40 } 41 42 //处理最后一个未归并的Interval 43 if(flag){ 44 temp.add(val); 45 } 46 47 return temp; 48 } 49 } 50 51 //实现排序接口 52 class ComparatorImpl implements Comparator<Interval> 53 { 54 public int compare(Interval o1, Interval o2) { 55 // TODO Auto-generated method stub 56 return o1.start-o2.start; 57 } 58 59 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)