Leetcode - insert interval

来源:互联网 发布:linux 网页中文乱码 编辑:程序博客网 时间:2024/04/30 01:54

这题应该清楚List是ArrayList还是LinkedList,ArrayList的话二分来查找更快,而LinkedList的话,直接线性遍历一遍即可。看了其他人的结题报告,基本线性一遍就可以过了。

然后注意各种边界条件即可:

1: newinterval 和intervals没有重合

2: newinterval和intervals重合。

import java.util.*; public class Solution {  int bSearch(List<Interval> intervals, int val){int n = intervals.size() ;if(val < intervals.get(0).start){return -1;}else if(val > intervals.get(n-1).start){return n-1;}int l = 0;int r = n-1;int m = -2;while(l<=r){m = (l+r)>>1;if( intervals.get(m).start <= val && (m >= n -1 || val < intervals.get(m+1).start))return m;else if(intervals.get(m).start > val)r = m -1;elsel = m + 1;}return m;}    public List<Interval> insert(List<Interval> intervals, Interval newInterval) {int n = intervals.size() ;if(n == 0){intervals.add(newInterval);return intervals;}        int kb = bSearch(intervals, newInterval.start);        int ke = bSearch(intervals, newInterval.end);                if(kb == ke)        {        if(kb == -1)        intervals.add(0,newInterval);                else if(newInterval.start > intervals.get(kb).end)        intervals.add(kb+1,newInterval);                else        intervals.get(ke).end = (intervals.get(ke).end > newInterval.end) ? intervals.get(ke).end : newInterval.end;                return intervals;        }                if(kb == -1)        {        kb++;        intervals.get(0).start = newInterval.start;        }                else if(intervals.get(kb).end < newInterval.start)        {        kb++;        intervals.get(kb).start = newInterval.start;        }                intervals.get(kb).end = (intervals.get(ke).end > newInterval.end) ? intervals.get(ke).end : newInterval.end;                for(int i = kb+1;i<=ke;i++)        {        intervals.remove(kb+1);        }                return intervals;            }        public static void main(String[] args)    {    List<Interval> intervals = new ArrayList<Interval>();    intervals.add(new Interval(1,5));    intervals.add(new Interval(9,12));    intervals.add(new Interval(20,22));         Solution sol = new Solution();    sol.insert(intervals, new Interval(10,15));        for(Interval interval : intervals)    {    System.out.println(interval.start + " " + interval.end);    }    }}


0 0
原创粉丝点击