Leetcode - insert interval

这题应该清楚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);
    	}
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LeetCode-Editor是一种在线编码工具,它提供了一个用户友好的界面编写和运行代码。在使用LeetCode-Editor时,有时候会出现乱码的问题。 乱码的原因可能是由于编码格式不兼容或者编码错误导致的。在这种情况下,我们可以尝试以下几种解决方法: 1. 检查文件编码格式:首先,我们可以检查所编辑的文件的编码格式。通常来说,常用的编码格式有UTF-8和ASCII等。我们可以将编码格式更改为正确的格式。在LeetCode-Editor中,可以通过界面设置或编辑器设置来更改编码格式。 2. 使用正确的字符集:如果乱码是由于使用了不同的字符集导致的,我们可以尝试更改使用正确的字符集。常见的字符集如Unicode或者UTF-8等。在LeetCode-Editor中,可以在编辑器中选择正确的字符集。 3. 使用合适的编辑器:有时候,乱码问题可能与LeetCode-Editor自身相关。我们可以尝试使用其他编码工具,如Text Editor、Sublime Text或者IDE,看是否能够解决乱码问题。 4. 查找特殊字符:如果乱码问题只出现在某些特殊字符上,我们可以尝试找到并替换这些字符。通过仔细检查代码,我们可以找到导致乱码的特定字符,并进行修正或替换。 总之,解决LeetCode-Editor乱码问题的方法有很多。根据具体情况,我们可以尝试更改文件编码格式、使用正确的字符集、更换编辑器或者查找并替换特殊字符等方法来解决这个问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值