您的位置:首页 > 编程语言 > Java开发

[leetcode-57]Insert Interval(java)

2015-08-03 11:27 453 查看
问题描述:

Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).

You may assume that the intervals were initially sorted according to their start times.

Example 1:

Given intervals [1,3],[6,9], insert and merge [2,5] in as [1,5],[6,9].

Example 2:

Given [1,2],[3,5],[6,7],[8,10],[12,16], insert and merge [4,9] in as [1,2],[3,10],[12,16].

This is because the new interval [4,9] overlaps with [3,5],[6,7],[8,10].

分析:该题与l-56很类似,首先,明确这样几点:

在插入newInterval之前,intervals是有序的,且没有overlapping,所以可以直接添加。

当检查到可以添加newInterval时,需要与顶部元素进行比较。因此,不妨统一赋值给current,减少代码量。

当插入到newInterval后,后面插入的每个元素都要检查与顶部元素的比较。

代码如下:392ms

[code]/**
 * Definition for an interval.
 * public class Interval {
 *     int start;
 *     int end;
 *     Interval() { start = 0; end = 0; }
 *     Interval(int s, int e) { start = s; end = e; }
 * }
 */
public class Solution {
    public List<Interval> insert(List<Interval> intervals, Interval newInterval) {
        List<Interval> res = new LinkedList<Interval>();
        int length = intervals.size();
        if(length<=0){
            res.add(newInterval);
            return res;
        }

        boolean filled = false;
        for(int i = 0;i<length;i++){
            Interval current = intervals.get(i);
            if(!filled && current.start>=newInterval.start){
                current = newInterval;
                filled = true;
                i--;
            }else if(!filled)
                res.add(current);

            if(filled){
                if(res.isEmpty()){
                    res.add(current);
                    continue;
                }
                Interval top = res.get(res.size()-1);
                if(top.end>=current.start)
                    top.end = Math.max(top.end,current.end);
                else 
                    res.add(current);
            }
        }
        if(!filled){
            Interval top = res.get(res.size()-1);
            if(top.end>=newInterval.start)
                top.end = Math.max(top.end,newInterval.end);
            else
                res.add(newInterval);
        }
        return res;
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: