Given a collection of intervals, merge all overlapping intervals.
Example 1:
Input: [[1,3],[2,6],[8,10],[15,18]]
Output: [[1,6],[8,10],[15,18]]
Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6].
Example 2:
Input: [[1,4],[4,5]]
Output: [[1,5]]
Explanation: Intervals [1,4] and [4,5] are considered overlapping.
拿到手上有部分思路但不知道怎么写
看了别人的发现
思路一
先按前一个元素排序
排序后 创建一个linkedlist
如果数组为空或前一个的后边界小于现在这个后边界
添加
else
merge
class Solution {
public int[][] merge(int[][] intervals) {
if(intervals == null){
return intervals;
}
//sort by starting value
Arrays.sort(intervals,new Comparator<int[]>(){
public int compare(int[] a,int []b){
return Integer.compare(a[0],b[0]);
}
});
//还有一种写法
//Arrays.sort(intervals,(a,b) -> Integer.compare(a[0],b[0]));
//if end of previous interval is more than the start of current interval, they are overlap;
LinkedList<int[]>mergedIntervals= new LinkedList<>();
for(int [] cur: intervals){
//if the list is empty or no overlap simply add current interval
if(mergedIntervals.isEmpty() || mergedIntervals.getLast()[1]<cur[0]){
mergedIntervals.add(cur);
}
else{
mergedIntervals.getLast()[1] =Math.max(mergedIntervals.getLast()[1],cur[1]);
}
}
return mergedIntervals.toArray(new int[0][]);//0 是array dimension
}
}
相关知识
java中集合的使用
java中集合的使用
java中比较器的使用
java中比较器使用