leetcode 56. 合并区间【数组】

  1. 先排序,题目没有说明数组是否有序,因此利用每个一维数组的首个元素对每个一位数组进行排序,注意compare方法的写法;
  2. 排序后,从头部开始对数组进行遍历,若当前数组的第二个元素比下一个数组的第一个元素大,说明两个数组表示的区间有重合,更新right边界的最大值,并鸡血遍历数组,直到两个数组没有重合区域。
class Solution {
    public int[][] merge(int[][] intervals) {
        List<int[]> list = new ArrayList<>();
        Arrays.sort(intervals, new Comparator<int[]>(){
            @Override
            public int compare(int[] a, int[] b){
                return a[0]-b[0];
            }
        });
        
        int i=0;
        int len = intervals.length;
        while(i<len){
            int left = intervals[i][0];
            int right = intervals[i][1];
            while(i<len-1 && right >= intervals[i+1][0]){
                right = Math.max(right, intervals[i+1][1]);
                i++;
            }
            list.add(new int[] {left, right});
            i++;
        }
        return list.toArray(new int[0][]);
    }
}
发布了55 篇原创文章 · 获赞 0 · 访问量 783

猜你喜欢

转载自blog.csdn.net/er_ving/article/details/104794547
今日推荐