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;
    }
}
全部评论

相关推荐

06-12 17:46
门头沟学院 Java
运营你豪哥:来说重点: ​1.项目前置,时间倒序。​​ 2.​项目描述强化结果与量化效果(STAR原则里的R)。​​ ​3.个人技能精炼,明确掌握程度,突出核心。​​ ​4.增加强有力开头的个人总结部分。​​ 5.​优化教育背景(成绩排名)、合并奖项与活动。​​
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
能干的三文鱼刷了10...:公司可能有弄嵌入式需要会画pcb的需求,而且pcb能快速直观看出一个人某方面的实力。看看是否有面试资格。问你问题也能ai出来,pcb这东西能作假概率不高
点赞 评论 收藏
分享
07-15 11:41
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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