leetcode hot100合并区间 Java
作者:互联网
题目描述
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。
思路:
- 如果数组的长度为0或者1,则直接返回该数组
- 初始化count用于计数合并了多少次
- 遍历数组,相邻两个元素intervals[i]和intervals[j],如果 intervals[i][1] >= intervals[j][0] && intervals[i][0] <= intervals[j][1],说明intervals[i]和intervals[j]可以合并,再判断:如果intervals[i]第一个元素的值小于intervals[j]第一个元素的值,则将intervals[i]第一个元素的值赋给intervals[j],如果intervals[i]第二个元素的值大于intervals[j]第二个元素的值,则将intervals[i]第二个元素的值赋给intervals[j]【目的就是更新intervals[j],让将intervals[j]的范围更大,intervals[i]赋值为null】
- 再new一个新数组,将intervals非null的值全赋给新数组,返回该新数组
代码:
class Solution {
public int[][] merge(int[][] intervals) {
if(intervals.length <=1){
return intervals;
}
int count = 0;
for(int i = 0;i<intervals.length;i++){
for(int j = i+1;j<intervals.length;j++){
if(intervals[i][1] >= intervals[j][0] && intervals[i][0] <= intervals[j][1]){
if(intervals[i][0] < intervals[j][0]){
intervals[j][0] = intervals[i][0];
}
if(intervals[i][1] > intervals[j][1]){
intervals[j][1] = intervals[i][1];
}
count++;
intervals[i] = null;
break;
}
}
}
int[][] res = new int[intervals.length-count][];
for(int i = 0,j=0;i<intervals.length;i++){
if(intervals[i]!=null){
res[j++] = intervals[i];
}
}
return res;
}
}
标签:count,Java,int,元素,intervals,hot100,数组,null,leetcode 来源: https://blog.csdn.net/stonney/article/details/114416946