15.3 Insert Interval

来源:互联网 发布:无标度网络的度分布 编辑:程序博客网 时间:2024/06/02 23:21

Link: https://oj.leetcode.com/problems/insert-interval/

This Q seems easy, but I didn't complete the code. 

The difficulty: I don't know how to deal when the newInterval's end < intervals.get(0).start

Approach I: Create a new ArrayList

Time: 0(n) Space: O(1) //结果集的空间不算

Note: When newInterval.end < interval.start: we put newInterval into result, and replace newInterval with current one. 

public class Solution {    public ArrayList<Interval> insert(ArrayList<Interval> intervals, Interval newInterval) {        ArrayList<Interval> result = new ArrayList<Interval>();        int i = 0;        for(Interval interval : intervals){            if(newInterval.end < interval.start){                result.add(newInterval);                newInterval = interval;//since newInterval has been saved, deal with the original intervals            }            else if(interval.end < newInterval.start){                result.add(interval);            }            else{                newInterval.start = Math.min(interval.start, newInterval.start);                newInterval.end = Math.max(interval.end, newInterval.end);            }        }        result.add(newInterval);        return result;    }}

Approach II: Use Iterator

Time: O(n), Space: O(1)

public class Solution {    public ArrayList<Interval> insert(ArrayList<Interval> intervals, Interval newInterval) {                ListIterator<Interval> it = intervals.listIterator();        while(it.hasNext()){            Interval interval = it.next();            if(newInterval.end < interval.start){//找到插入点                it.previous(); //must use ListIterator to traverse backwards                 it.add(newInterval);                return intervals;//can stop traversing            }            else if(interval.end < newInterval.start){//还没有overlap                continue;            }            else{//overlap了,更新被插入的Interval,删除原来的(因为已经被用过)                newInterval.start = Math.min(interval.start, newInterval.start);                newInterval.end = Math.max(interval.end, newInterval.end);                it.remove();//why?            }        }        intervals.add(newInterval);        return intervals;    }}



0 0
原创粉丝点击