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

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

示例 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] 重叠。

方法1:在56的基础上,采用先插入再合并的方式,过于繁琐,可以直接看方法2

 class Solution {
public int[][] insert(int[][] intervals, int[] newInterval) {
if(intervals.length == 0){
int[][] res = new int[1][2];
res[0] = newInterval;
return res;
}
List<int[]> list = new ArrayList();
int temp = -1;//
boolean flag = false;
for(int i = 0;i < intervals.length;i++){
if(newInterval[0] < intervals[i][0]){
flag=true;//当没有找到要插入的位置,必插入末尾
temp = i;
break;
}
}
for(int i = 0;i < intervals.length;i++){
if(i == temp){
list.add(newInterval);
}
list.add(intervals[i]);
}
if(!flag){
list.add(newInterval);
}
int[][] in2 = new int[list.size()][2];
for(int i = 0;i < list.size();i++){
in2[i][0] = list.get(i)[0];
in2[i][1] = list.get(i)[1];
}
return helper(in2); }
public int[][] helper(int[][] in2){
List<int[]> res = new ArrayList<>();
for(int i = 0;i < in2.length-1;i++ ){
if(in2[i+1][0] <= in2[i][1]){
in2[i+1][0] = in2[i][0];
in2[i+1][1] = Math.max(in2[i+1][1],in2[i][1]);
}else{
res.add(in2[i]);
}
}
res.add(in2[in2.length - 1]);
int[][] res_s =new int[res.size()][2];
for(int i = 0;i < res.size();i++){
res_s[i][0] = res.get(i)[0];
res_s[i][1] = res.get(i)[1];
}
return res_s;
}
}

方法2:

 class Solution {
public List<Interval> insert(List<Interval> intervals, Interval newInterval) {
List<Interval> result = new ArrayList<Interval>();
boolean isAddedNew = false;
for(Interval curr : intervals){
if(newInterval.start > curr.end){
//new > curr
result.add(curr);
}else if (newInterval.end < curr.start){
//curr > new
if(!isAddedNew){
result.add(newInterval);
isAddedNew = true;
}
result.add(curr);
}else{
int newStart = curr.start < newInterval.start ?
curr.start : newInterval.start;
int newEnd = curr.end > newInterval.end ?
curr.end : newInterval.end;
newInterval.start = newStart;
newInterval.end = newEnd;
} }
if(!isAddedNew){
result.add(newInterval);
}
return result;
}
}

2019-05-17 18:14:22

LeetCode--057--插入区间(java)的更多相关文章

  1. Java实现 LeetCode 57 插入区间

    57. 插入区间 给出一个无重叠的 ,按照区间起始端点排序的区间列表. 在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间). 示例 1: 输入: inte ...

  2. LeetCode 57 插入区间

    题目: 给出一个无重叠的 ,按照区间起始端点排序的区间列表. 在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间). 示例 1: 输入: intervals ...

  3. leetcode 56 合并区间 JAVA

    题目: 给出一个区间的集合,请合并所有重叠的区间. 示例 1: 输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [ ...

  4. leetcode 56合并区间 java

    //先排序,将左区间小的放在前面,然后如果前一个的右区间大于下一个的左区间,则可以合并,分别用两个下标指向当前的大区间和将要考察的小区间 class Solution {    public int[ ...

  5. leetcode Insert Interval 区间插入

    作者:jostree  转载请注明出处 http://www.cnblogs.com/jostree/p/4051169.html 题目链接:leetcode Insert Interval 使用模拟 ...

  6. 【LeetCode-面试算法经典-Java实现】【057-Insert Interval(插入区间)】

    [057-Insert Interval(插入区间)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a set of non-overlapping in ...

  7. LeetCode:汇总区间【228】

    LeetCode:汇总区间[228] 题目描述 给定一个无重复元素的有序整数数组,返回数组区间范围的汇总. 示例 1: 输入: [0,1,2,4,5,7] 输出: ["0->2&quo ...

  8. 【BZOJ】3065: 带插入区间K小值

    http://www.lydsy.com/JudgeOnline/problem.php?id=3065 题意:带插入.修改的区间k小值在线查询.(原序列n<=35000, 询问<=175 ...

  9. lintcode:插入区间

    题目: 插入区间 给出一个无重叠的按照区间起始端点排序的区间列表. 在列表中插入一个新的区间,你要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间). 样例 插入区间[2, 5] 到 [ ...

  10. bzoj 3065: 带插入区间K小值 替罪羊树 && AC300

    3065: 带插入区间K小值 Time Limit: 60 Sec  Memory Limit: 512 MBSubmit: 1062  Solved: 253[Submit][Status] Des ...

随机推荐

  1. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第1节 常用函数接口_16_常用的函数式接口_Function接口中练习-自定义函数模型拼接

  2. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_07 缓冲流_1_缓冲流的原理

    一个字节一个字节的读取,先读取到a,a给到os操作系统.os再给JVM,.jVM再把a给java程序 读完a再读取b.这样一层层的返回,效率低下 一次读取,缓冲区数组返回来.

  3. Java设计模式——建造者模式(创建型模式)

    概述   建造者模式也称为生成器模式,是一种对象创建型模式,它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象.   建造者模式意在为重叠构造 ...

  4. Mac018--VisualBox & ubuntu 安装

    一.安装虚拟机VMware 参考博客:https://blog.csdn.net/u013142781/article/details/50529030 Step1:下载ubuntu镜像 注:选择Ub ...

  5. heaplog

    #ifdef _DEBUG #include <stdio.h> #include <stdlib.h> #include <string.h> #define _ ...

  6. Leveldb源码分析--3

    http://blog.csdn.net/sparkliang/article/details/8604416

  7. [Web 前端] 013 css 内外边距

    1. css 内间距 也称:"内补白"或"内补丁" 参数 释义 padding 检索或设置对象四边的内部边距,如 padding:10px; padding:5 ...

  8. struts框架中常用到的标签

    2.<constant name="struts.i18n.encoding" value="UTF-8" />     指定Web应用的默认编码集 ...

  9. 一个 Java 字符串到底有多少个字符?

    来源:http://dwz.win/jqd 依照Java的文档, Java中的字符内部是以UTF-16编码方式表示的,最小值是 \u0000 (0),最大值是\uffff(65535), 也就是一个字 ...

  10. iOS 应用配置及证书生成教程

    简介 首先你需要有一个苹果的开发者帐号,一台苹果电脑.点击查看苹果开发者账号注册流程 本教程需完成应用信息配置,包括如下两个基本配置: AppID Bundle ID 同时,生成 如下三个证书文件及对 ...