Я хочу разобраться с проблемой интервалов слияния, которая любит:
Учитывая совокупность интервалов, объединить все перекрывающиеся интервалы.
Пример 1:
Ввод: [[ 1,3], [2,6], [8,10], [15,18]]
Выход: [[1,6], [8,10], [15,18]]
Объяснение: Поскольку интервалы [1,3] и [2,6] перекрываются, объедините их в [1,6]. Пример 2:
Вход: [[1,4], [4,5]]
Выход: [[1,5]]
Объяснение: Интервалы [1 , 4] и [4,5] считаются перекрывающимися.
А вот мой код:
class Solution {
public int[][] merge(int[][] intervals) {
if(intervals.length==0 || intervals[0].length==0) return intervals;
Arrays.sort(intervals, new Comparator<int[]>(){
@Override
public int compare(int[] o1, int[] o2) {
return o1[0]>=o2[0]?1:-1;
}
});
// Arrays.sort(intervals, (a,b)->a[0]-b[0]);
Queue<Node> list = new LinkedList<>();
int fro=intervals[0][0] , tail=intervals[0][1];
for(int i=1; i<intervals.length; i++){
if(intervals[i][0]>tail){
list.add(new Node(fro, tail));
fro = intervals[i][0];
tail = intervals[i][1];
}
if(intervals[i][1]>tail)
tail = intervals[i][1];
}
list.add(new Node(fro, tail));
int len = list.size();
int result[][] = new int[len][2];
for(int i=0; i<len; i++){
Node node = list.poll();
result[i][0] = node.a;
result[i][1] = node.b;
}
return result;
}
}
class Node{
public int a;
public int b;
Node(int a, int b){
this.a = a;
this.b = b;
}
}
Он может обрабатывать примеры 1 и 2 одновременно, но выдает исключение IllegalArgumentException при вводе выборки вот так:
https://leetcode-cn.com/submissions/detail/63259384/testcase
Спасибо!