力扣 56. 合并区间

题目描述:

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。

解析:

1.将数组中的区间按照起始位置排序
2.用curr数组记录当前合并的最大区间,遍历数组中的每一个区间,
如果当前区间的起始位置小于curr的终点位置,则可以继续合并,所以合并并更新curr的起始位置和终止位置。
如果当前区间的起始位置大于curr的终止位置,则无法合并。
所以将curr加入到result里,并用当前的区间替换curr值。
3.循环后判断curr的长度是否为零,若不为零,则将curr加入到result里。
4.最后返回result。

Java:

public int[][] merge(int[][] intervals) {
        if(intervals.length < 2) {
            return intervals;
        }
        Arrays.sort(intervals, (i1, i2) -> Integer.compare(i1[0],i2[0]));

        int[] curr = intervals[0];
        ArrayList<int[]> result = new ArrayList<>();
        for(int[] interval : intervals) {
            if(curr[1] >= interval[0]) {
                curr[1] = Math.max(curr[1], interval[1]);
            } else {
                result.add(curr);
                curr = interval;
            }
        }
        if(curr.length != 0) {
            result.add(curr);
        }
        return result.toArray(new int[result.size()][]);
    }

JavaScript:

var merge = function(intervals) {
    if(intervals.length < 2) {
        return intervals;
    }
    intervals.sort(function(a, b){
        return a[0] - b[0];
    })
    let curr = intervals[0];
    let result = [];
    for(let interval of intervals) {
        if(curr[1] >= interval[0]) {
            curr[1] = Math.max(curr[1], interval[1]);
        } else {
            result.push(curr);
            curr = interval;
        }
    }
    if(curr.length !== 0) {
        result.push(curr);
    }
    return result;
};
全部评论

相关推荐

能干的三文鱼刷了100道题:公司可能有弄嵌入式需要会画pcb的需求,而且pcb能快速直观看出一个人某方面的实力。看看是否有面试资格。问你问题也能ai出来,pcb这东西能作假概率不高
点赞 评论 收藏
分享
点赞 评论 收藏
分享
感觉他们一点都不了解现在这个社会就业有多难,已经在牛客刷到好多篇&nbsp;延毕的帖子了,延毕就会导致已经找好的工作就没了,还得重新再找,学校和老师们是怎么想的呢????看到学生丢失工作会开心吗&nbsp;就业数据都在造假,真实的就业困难不去解决&nbsp;一个个真是好样的
从今天开始狠狠卷JVAV_癫:学生看到的是导师不放实习导致offer黄了。 导师看到的是招进来的学生吃自己补助和自己的招生名额,却没给自己升迁带来任何帮助,还要跑路。 根本利益的不一致,最主要留校的导师大概率是职场上招聘失败的,被迫留校的,什么牛鬼蛇神都会有
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务