LeetCode--057--插入区间(java)
给出一个无重叠的 ,按照区间起始端点排序的区间列表。
在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。
示例 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)的更多相关文章
- Java实现 LeetCode 57 插入区间
57. 插入区间 给出一个无重叠的 ,按照区间起始端点排序的区间列表. 在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间). 示例 1: 输入: inte ...
- LeetCode 57 插入区间
题目: 给出一个无重叠的 ,按照区间起始端点排序的区间列表. 在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间). 示例 1: 输入: intervals ...
- leetcode 56 合并区间 JAVA
题目: 给出一个区间的集合,请合并所有重叠的区间. 示例 1: 输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [ ...
- leetcode 56合并区间 java
//先排序,将左区间小的放在前面,然后如果前一个的右区间大于下一个的左区间,则可以合并,分别用两个下标指向当前的大区间和将要考察的小区间 class Solution { public int[ ...
- leetcode Insert Interval 区间插入
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4051169.html 题目链接:leetcode Insert Interval 使用模拟 ...
- 【LeetCode-面试算法经典-Java实现】【057-Insert Interval(插入区间)】
[057-Insert Interval(插入区间)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a set of non-overlapping in ...
- LeetCode:汇总区间【228】
LeetCode:汇总区间[228] 题目描述 给定一个无重复元素的有序整数数组,返回数组区间范围的汇总. 示例 1: 输入: [0,1,2,4,5,7] 输出: ["0->2&quo ...
- 【BZOJ】3065: 带插入区间K小值
http://www.lydsy.com/JudgeOnline/problem.php?id=3065 题意:带插入.修改的区间k小值在线查询.(原序列n<=35000, 询问<=175 ...
- lintcode:插入区间
题目: 插入区间 给出一个无重叠的按照区间起始端点排序的区间列表. 在列表中插入一个新的区间,你要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间). 样例 插入区间[2, 5] 到 [ ...
- bzoj 3065: 带插入区间K小值 替罪羊树 && AC300
3065: 带插入区间K小值 Time Limit: 60 Sec Memory Limit: 512 MBSubmit: 1062 Solved: 253[Submit][Status] Des ...
随机推荐
- 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第1节 常用函数接口_16_常用的函数式接口_Function接口中练习-自定义函数模型拼接
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_07 缓冲流_1_缓冲流的原理
一个字节一个字节的读取,先读取到a,a给到os操作系统.os再给JVM,.jVM再把a给java程序 读完a再读取b.这样一层层的返回,效率低下 一次读取,缓冲区数组返回来.
- Java设计模式——建造者模式(创建型模式)
概述 建造者模式也称为生成器模式,是一种对象创建型模式,它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象. 建造者模式意在为重叠构造 ...
- Mac018--VisualBox & ubuntu 安装
一.安装虚拟机VMware 参考博客:https://blog.csdn.net/u013142781/article/details/50529030 Step1:下载ubuntu镜像 注:选择Ub ...
- heaplog
#ifdef _DEBUG #include <stdio.h> #include <stdlib.h> #include <string.h> #define _ ...
- Leveldb源码分析--3
http://blog.csdn.net/sparkliang/article/details/8604416
- [Web 前端] 013 css 内外边距
1. css 内间距 也称:"内补白"或"内补丁" 参数 释义 padding 检索或设置对象四边的内部边距,如 padding:10px; padding:5 ...
- struts框架中常用到的标签
2.<constant name="struts.i18n.encoding" value="UTF-8" /> 指定Web应用的默认编码集 ...
- 一个 Java 字符串到底有多少个字符?
来源:http://dwz.win/jqd 依照Java的文档, Java中的字符内部是以UTF-16编码方式表示的,最小值是 \u0000 (0),最大值是\uffff(65535), 也就是一个字 ...
- iOS 应用配置及证书生成教程
简介 首先你需要有一个苹果的开发者帐号,一台苹果电脑.点击查看苹果开发者账号注册流程 本教程需完成应用信息配置,包括如下两个基本配置: AppID Bundle ID 同时,生成 如下三个证书文件及对 ...