leetcode 56. Merge Intervals

来源:互联网 发布:电脑随机抽取软件 编辑:程序博客网 时间:2024/05/15 00:12

Given a collection of intervals, merge all overlapping intervals.

For example,
Given [1,3],[2,6],[8,10],[15,18],
return [1,6],[8,10],[15,18].

构造一个hashmap<起始点,终点>
先放入<1,3>
这里写图片描述

新的 键值对 i j  :    对于起点 < i的且 终点 > i 的:        合并    对于起点 < j的且 终点 > j 的:        合并    对于起点 > i的且 终点 < j 的:        原键值对被吞掉     对于起点 < i的且 终点 > j 的:        新键值对被吞掉 

情况非常复杂 写不下了 看了网上的
原来先排个序就完美解决了
排序后相邻的两个
这里写图片描述
蓝色是start最小的interval 那么第二小的可能有三种情况
1. 被包含
2. 延长了 当前interval
3. 加进来 不冲突
接下来针对当前队尾interval 考虑新的interval

public List<Interval> merge(List<Interval> intervals) {        List<Interval> result = new ArrayList<Interval>();        intervals.sort((a,b)->(a.start - b.start));        for(Interval currentInterval:intervals ){            if(result.size() == 0){                result.add(currentInterval);            }            else{                Interval lastInterval = result.get(result.size()-1);                if(currentInterval.start > lastInterval.end) result.add(currentInterval);                else if(currentInterval.end > lastInterval.end){                    lastInterval.end = currentInterval.end;                }            }        }        return result;    }
0 0
原创粉丝点击