跳至主要內容

056. 合并区间

T4mako算法数组排序大约 1 分钟

056. 合并区间

题目描述open in new window

中等

解题思路:
1、对intervals以每个数组的首位进行排序,需要重写比较器
2、创建泛型为int[]的list用于构建结果二维数组
3、合并方法:从头遍历,[a,b] [c,d] 判断 b<=c 成立即可合并到后一个数组上,合并后为[max(a,c),min(b,d)]。否则加入到list中
4、最后需要加上intervals末尾的数组
5、arr.toArray()中的参数为返回的类型,arr.toArray(new int[0][])返回二维数组

class Solution {
    public int[][] merge(int[][] intervals) {
        // 对intervals排序
        Arrays.sort(intervals, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                return Integer.compare(o1[0] , o2[0]);
            }
        });
        // 创建泛型为int[]的list
        ArrayList<int[]> arr = new ArrayList<>();
        for (int i = 0; i < intervals.length-1; i++) {
            // [a,b],[c,d] 判断 b<=c 成立即可合并
            if(intervals[i][1] >= intervals[i+1][0]){
                intervals[i+1][0] = Math.min(intervals[i][0],intervals[i+1][0]);
                intervals[i+1][1] = Math.max(intervals[i][1],intervals[i+1][1]);
            }else{
                // 不可合并则添加
                arr.add(intervals[i]);
            }
        }
        // 最后加上末尾的数组
        arr.add(intervals[intervals.length-1]);
        // toArray()方法中的参数为返回的类型
        return arr.toArray(new int[0][]);
    }
}
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.5