Я хочу определить компаратор в JAVA по 'Arrays.sort (интервалы, новый компаратор () 'чтобы справиться с пробловой, но она выдает IllegalArgumentException - PullRequest
0 голосов
/ 16 апреля 2020

Я хочу разобраться с проблемой интервалов слияния, которая любит:

Учитывая совокупность интервалов, объединить все перекрывающиеся интервалы.

Пример 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

Спасибо!

...