leetcode【每日一题】 合并区间 java

题干

给出一个区间的集合,请合并所有重叠的区间。

示例 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] 可被视为重叠区间。

想法

先按照每个区间的左端点排序
然后再遍历判断右端点包含更大那个
注意注意注意边界条件

Java代码

package daily;
import java.util.*;
import java.util.Comparator;

public class MergingInterval {
    public int[][] merge(int[][] intervals) {
        List<int[]> res=new ArrayList<>();
        //空判断
        if (intervals.length == 0 || intervals == null) return res.toArray(new int[0][]);
       //按照左端点升序排序
        Arrays.sort(intervals, Comparator.comparingInt(a -> a[0]));
        for(int i=0;i<intervals.length;i++){
            //左右端点
            int left=intervals[i][0];
            int right=intervals[i][1];
            //合并区间 right取大的
            while(i<intervals.length-1&&intervals[i+1][0]<=right){
                i++;
                right=Math.max(right,intervals[i][1]);
            }
            res.add(new int []{left,right});
        }
        return  res.toArray(new int[0][]);
    }
    public  static  void main(String[] args){
        MergingInterval mergingInterval=new MergingInterval();
        int [][] test=new  int [][]{{1,3},{2,6},{8,10},{15,18}};
        int [][]result=mergingInterval.merge(test);
        for (int [] ints: result
             ) {
            System.out.println(Arrays.toString(ints));

        }
    }
}

我的leetcode代码都已经上传到我的git

发布了180 篇原创文章 · 获赞 0 · 访问量 3760

猜你喜欢

转载自blog.csdn.net/qq_43491066/article/details/105553051