力扣第57题:插入区间

学习目标:

力扣第57题:插入区间


学习内容:

给出一个无重叠的 ,按照区间起始端点排序的区间列表。

在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)

示例 1:
输入:intervals = [[1,3],[6,9]], newInterval = [2,5]
输出:[[1,5],[6,9]]

示例 2:
输入:intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]
输出:[[1,2],[3,10],[12,16]]
解释:这是因为新的区间 [4,8] 与 [3,5],[6,7],[8,10] 重叠。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/insert-interval
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


学习时间:

2020年11月4日


学习产出:

/**   
 * @ClassName: Solution.java
 * @Description: 双指针分别找到左边合右边不重合的部分,剩下对重合部分进行处理,
 * 重合部分的处理为左边的元素为intervals和newInterval中最小的元素
 * 右边的元素为intervals和newInterval中最大的元素
 *
 * @version: v1.0.0
 * @author: 童一
 * @date: 2020年11月4日 下午10:25:42 
 *
 * Modification History:
 Modification History:
 * Date            Author          Version            Description
 *----------------------------------------------------------------*
 * 2020年11月4日   童梦君          v1.0.0               修改原因
 */

public class Solution {
	 public int[][] insert(int[][] intervals, int[] newInterval) {
	       if(intervals.length==0) {
	    	   return new int[][] {newInterval};//如果
	       }
	       ArrayList<int []> list = new ArrayList<>();
	       int left = 0;
	       int right = intervals.length-1;
	       while(left<intervals.length&&intervals[left][1]<newInterval[0]) {
	    	   list.add(intervals[left++]);//左边不重合的添加到集合中
	       }
	       while(right>=0&&intervals[right][0]>newInterval[1]) {
	    	   list.add(left,intervals[right--]);//右边不重合的
	       }
	       //中间重合的部分
	       int [] arr = new int [2];
	       //重合部分的左边,
	       arr[0]=left>=intervals.length?newInterval[0]:Math.min(intervals[left][0],newInterval[0]);
	       //重合部分的右边
	       arr[1]=right<0?newInterval[1]:Math.max(intervals[right][1],newInterval[1]);
	       list.add(left,arr);//加入集合(原来left位置的元素会往后移)
	       int[][]newarr=new int [list.size()][2];
	       for(int i =0;i<list.size();i++) {
	    	   newarr[i]=list.get(i);
	       }
	       return newarr;
	    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值