【LeetCode-中等题】56. 合并区间

题目

【LeetCode-中等题】56. 合并区间_第1张图片

题解一:排序

思路:
1、对数组按第一个元素大小进行排序,使得数组按大小连续排列

【LeetCode-中等题】56. 合并区间_第2张图片
2、先将第一个数组提前放入list集合,因为肯定是从第一个开始算起的
3、接着对下一个数组的左边界和list集合最后一个元素的右边界对比,如果下一个数组的左边界小于等于list集合最后一个元素的右边界,说明有重叠,这样更新list集合最后一个元素的右边界,取两者右边界的最大值作为右边界
4、若下一个数组的左边界大于等于list集合最后一个元素的右边界,说明没有重合,则直接加入到list集合
【LeetCode-中等题】56. 合并区间_第3张图片

   public  int[][] merge(int[][] intervals) {
        if (intervals.length==0) {
            return new int[0][2];
        }
        Arrays.sort(intervals, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                return o1[0]-o2[0];
            }
        });
        List<int[]> list = new ArrayList<>();
        list.add(intervals[0]);//提前把第一个存进去
        for (int i = 1; i < intervals.length; i++) {//判断边界条件是否满足合并数组的要求
//             int[] num =  list.get(list.size() - 1);//取出list集合最后一个数组
             if (list.get(list.size() - 1)[1]>=intervals[i][0]) {   //若list集合最后一个数组右边界大于等于  后面数组的左边界,则需要合并数组
                 list.get(list.size() - 1)[1] = Math.max(list.get(list.size() - 1)[1],intervals[i][1]);//取右边界最大的那一个数左右合并数组的右边界;
            }else {//不满足合并数组的要求,直接加入list集合,作为list集合最后一个数组
                 list.add(intervals[i]);
             }
        }

        return list.toArray(new int[list.size()][]);

    }

参考链接:贪心算法,合并区间有细节!LeetCode:56.合并区间

你可能感兴趣的:(#,中等题,力扣,leetcode,算法,职场和发展)