56. 合并区间
题目:
给出一个区间的集合,请合并所有重叠的区间。
示例 1:
输入: intervals = [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
示例 2:
输入: intervals = [[1,4],[4,5]] 输出: [[1,5]] 解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。
注意:输入类型已于2019年4月15日更改。 请重置默认代码定义以获取新方法签名。
提示:
intervals[i][0] <= intervals[i][1]
代码:
// Arrays.sort(intervals, new Comparator<int[]>() 比较的更好办法
//{ public int compare(int[] interval1, int[] interval2)
//{ return interval1[0] - interval2[0]; } });
1 class Solution { 2 public int[][] merge(int[][] intervals) { 3 var arraylist=new ArrayList(); 4 int k=0; 5 //先按照[i][0]排序 6 for(int i=intervals.length-1;i>=0;--i){ 7 boolean b=false; 8 for(int j=1;j<=i;++j){ 9 if(intervals[j][0]<intervals[j-1][0]){ 10 //swap 11 k=intervals[j][0]; 12 intervals[j][0]=intervals[j-1][0]; 13 intervals[j-1][0]=k; 14 15 k=intervals[j][1]; 16 intervals[j][1]=intervals[j-1][1]; 17 intervals[j-1][1]=k; 18 b=true; 19 } 20 } 21 if(!b){break;} 22 } 23 24 k=0; 25 for(int i=0;i<intervals.length;){ 26 int j=i+1; 27 while(j<intervals.length){ 28 //[i][1]与[i+1][0],[i+1][1],有三种情况 29 if(intervals[i][1]>=intervals[j][0]&&intervals[i][1]<=intervals[j][1]){ 30 intervals[i][1]=intervals[j][1]; 31 ++j; 32 continue; 33 } 34 if(intervals[i][1]<intervals[j][0]){break;} 35 if(intervals[i][1]>intervals[j][1]){++j;} 36 } 37 intervals[k][0]= intervals[i][0]; 38 intervals[k][1]= intervals[i][1]; 39 i=j; 40 ++k; 41 } 42 return Arrays.copyOfRange(intervals,0,k); 43 44 } 45 }
代码2: //更简洁
1 class Solution { 2 public int[][] merge(int[][] intervals) { 3 if (intervals.length == 0) { 4 return new int[0][2]; 5 } 6 Arrays.sort(intervals, new Comparator<int[]>() { 7 public int compare(int[] interval1, int[] interval2) { 8 return interval1[0] - interval2[0]; 9 } 10 }); 11 List<int[]> merged = new ArrayList<int[]>(); 12 for (int i = 0; i < intervals.length; ++i) { 13 int L = intervals[i][0], R = intervals[i][1]; 14 if (merged.size() == 0 || merged.get(merged.size() - 1)[1] < L) { 15 merged.add(new int[]{L, R}); 16 } else { 17 merged.get(merged.size() - 1)[1] = Math.max(merged.get(merged.size() - 1)[1], R); 18 } 19 } 20 return merged.toArray(new int[merged.size()][]); 21 } 22 }
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术