LC56 - 合并区间

合并两个排序的链表

http://www.nowcoder.com/questionTerminal/d8b6b4358f774294a89de2a6ac4d9337

两个区间合并一共有六种可能
图片说明
首先要把它们都转换成第一行的三种情况,那么就需要保证第一个区间的开始小于第二个区间的开始,于是我们需要把所有区间按开始的大小排序,之后再按这三种情况讨论。
以下是代码

class Solution {
    public int[][] merge(int[][] intervals) {
        if(intervals.length == 0 || intervals == null) return intervals;
        //将所有区间按区间开始大小排序
        Arrays.sort(intervals, (a,b) -> a[0] - b[0]);
        //用一个list来存放所有区间
        List<int[]> list = new ArrayList<>();
        //先将第一个元素设为cur区间
        int[] cur = intervals[0];
        for(int i=1; i<intervals.length; i++){
            //情况3,两区间不想交,直接将当前cur区间提交并更新cur区间
            if(intervals[i][0] > cur[1]){
                list.add(cur);
                cur = intervals[i];
            }else{
                //情况1或2,cur区间的结束值取两个区间结束值的最大值
                cur[1] = Math.max(cur[1], intervals[i][1]);
            }
        }
        list.add(cur);
        int[][] ans = new int[list.size()][2];
        //将list重整为数组输出
        for(int i=0; i<list.size(); i++){
            ans[i] = list.get(i);
        }
        return ans;
    }
}
全部评论

相关推荐

Gaynes:查看图片
点赞 评论 收藏
分享
水墨不写bug:疑似没有上过大学
点赞 评论 收藏
分享
想熬夜的小飞象在秋招:我觉得这模版挺好啊,可以调大点行距,大佬能不能推荐一下是在哪找的模板
应届生,你找到工作了吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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