现在的位置: 首页 > 综合 > 正文

Leetcode – insert interval

2018年03月18日 ⁄ 综合 ⁄ 共 1681字 ⁄ 字号 评论关闭

这题应该清楚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;
			else
				l = 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);
    	}
    }
}
【上篇】
【下篇】

抱歉!评论已关闭.