LeetCode刷题---合并区间

发布时间:2023年12月28日

在这里插入图片描述
解题思路:

一次遍历,首先按照每个元素区间的start来排序,之后定义一个列表将第一个元素添加进去,依次遍历数组的每个元素,如果第二个元素区间的start小于或者等于第一个元素区间的end,则证明两个区间是重叠的,需要进行合并区间操作,在合并的时候取第一个区间的start元素为新区间的start,取两个区间最大的end,为新区间的end,最后将新区间添加到列表中。如果二个元素区间的start大于第一个元素区间的end,则两个区间是不重叠的,直接将第二个区间添加到列表中,最后将列表转换为数组返回。

代码实现:

public int[][] merge(int[][] intervals) {
        //首先对二维数组按照第一个元素进行排序
        Arrays.sort(intervals, (a, b) -> a[0] - b[0]);
        //定义列表用于返回结果
        List<int[]> res = new ArrayList<>();
        res.add(intervals[0]);
        for(int i=1;i<intervals.length;i++)
        {
            int s = intervals[i][0], e = intervals[i][1];
            if(res.get(res.size() - 1)[1]<s)//第二个区间的start大于第一个区间的end,证明不重叠
            {
                //将第二个区间添加进去
                res.add(intervals[i]);
            }
            else
            {
                //两个区间重叠了,则执行合并操作
                //从两个区间的end中选择一个最大的作为合并区间的end
                res.get(res.size()-1)[1]=Math.max(res.get(res.size() - 1)[1], e);
            }
        }

        return res.toArray(new int[res.size()][]);
    }
文章来源:https://blog.csdn.net/weixin_47109902/article/details/135256726
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。