Java for LeetCode 057 Insert Interval
Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).
You may assume that the intervals were initially sorted according to their start times.
Example 1:
Given intervals [1,3],[6,9], insert and merge [2,5] in as [1,5],[6,9].
Example 2:
Given [1,2],[3,5],[6,7],[8,10],[12,16], insert and merge [4,9] in as [1,2],[3,10],[12,16].
This is because the new interval [4,9] overlaps with [3,5],[6,7],[8,10].
解题思路一:
参考Java for LeetCode 056 Merge Intervals思路一,去掉最外层循环即可,JAVA实现如下:
public List<Interval> insert(List<Interval> intervals, Interval newInterval) {
if (newInterval == null)
return intervals;
int startIndex = 0, endIndex = 0;
for (int j = 0; j < intervals.size(); j++) {
if (newInterval.start > intervals.get(j).end) {
startIndex += 2;
endIndex += 2;
continue;
}
if (newInterval.end < intervals.get(j).start)
break;
if (newInterval.start >= intervals.get(j).start)
startIndex++;
if (newInterval.end > intervals.get(j).end) {
endIndex += 2;
continue;
}
if (newInterval.end >= intervals.get(j).start)
endIndex++;
break;
}
if(startIndex==endIndex&&startIndex%2==0)
intervals.add(startIndex/2,new Interval(newInterval.start,newInterval.end));
else if(startIndex%2==0&&endIndex%2==0){
intervals.get(startIndex/2).start=newInterval.start;
intervals.get(startIndex/2).end=newInterval.end;
for(int k=1;k<endIndex/2-startIndex/2;k++)
intervals.remove(startIndex/2+1);
}
else if(startIndex%2==0&&endIndex%2!=0){
intervals.get(startIndex/2).start=newInterval.start;
intervals.get(startIndex/2).end=intervals.get(endIndex/2).end;
for(int k=1;k<=endIndex/2-startIndex/2;k++)
intervals.remove(startIndex/2+1);
}
else if(startIndex%2!=0&&endIndex%2==0){
intervals.get(startIndex/2).end=newInterval.end;
for(int k=1;k<endIndex/2-startIndex/2;k++)
intervals.remove(startIndex/2+1);
}
else if(startIndex%2!=0&&endIndex%2!=0){
intervals.get(startIndex/2).end=intervals.get(endIndex/2).end;
for(int k=1;k<=endIndex/2-startIndex/2;k++)
intervals.remove(startIndex/2+1);
}
return intervals;
}
解题思路二:
参考Java for LeetCode 056 Merge Intervals思路二,添加后重新排序即可,JAVA实现如下:
public List<Interval> insert(List<Interval> intervals, Interval newInterval) {
if (intervals == null)
return intervals;
List<Interval> list = new ArrayList<Interval>();
intervals.add(newInterval);
Comparator<Interval> comparator = new Comparator<Interval>() {
@Override
public int compare(Interval o1, Interval o2) {
if (o1.start == o2.start)
return o1.end - o2.end;
return o1.start - o2.start;
}
};
Collections.sort(intervals, comparator);
for (Interval interval : intervals) {
if (list.size() == 0 || list.get(list.size() - 1).end < interval.start)
list.add(new Interval(interval.start, interval.end));
else
list.get(list.size() - 1).end = Math.max(interval.end, list.get(list.size() - 1).end);
}
return list;
}
Java for LeetCode 057 Insert Interval的更多相关文章
- 【题解】【区间】【二分查找】【Leetcode】Insert Interval & Merge Intervals
Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessa ...
- leetcode 57 Insert Interval & leetcode 1046 Last Stone Weight & leetcode 1047 Remove All Adjacent Duplicates in String & leetcode 56 Merge Interval
lc57 Insert Interval 仔细分析题目,发现我们只需要处理那些与插入interval重叠的interval即可,换句话说,那些end早于插入start以及start晚于插入end的in ...
- 【leetcode】Insert Interval
Insert Interval Given a set of non-overlapping intervals, insert a new interval into the intervals ( ...
- Leetcode: Merge/Insert Interval
题目 Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[2,6],[ ...
- leetCode 57.Insert Interval (插入区间) 解题思路和方法
Insert Interval Given a set of non-overlapping intervals, insert a new interval into the intervals ...
- 第一周 Leetcode 57. Insert Interval (HARD)
Insert interval 题意简述:给定若干个数轴上的闭区间,保证互不重合且有序,要求插入一个新的区间,并返回新的区间集合,保证有序且互不重合. 只想到了一个线性的解法,所有区间端点,只要被其 ...
- LeetCode 57. Insert Interval 插入区间 (C++/Java)
题目: Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if nec ...
- LeetCode: 57. Insert Interval(Hard)
1. 原题链接 https://leetcode.com/problems/insert-interval/description/ 2. 题目要求 该题与上一题的区别在于,插入一个新的interva ...
- 057 Insert Interval 插入区间
给出一个无重叠的按照区间起始端点排序的区间列表.在列表中插入一个新的区间,你要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间).示例 1:给定区间 [1,3],[6,9],插入并合并 ...
随机推荐
- Hamcrest
Hamcrest比起JUnit的assert系列方法来,有更好的可读性,它按照参数从左到右的符合自然的顺序来展示,如actual is(notNullValue()),是对测试断言的改进.同时不会被哪 ...
- 洛谷P1136 迎接仪式
题目描述 LHX教主要来X市指导OI学习工作了.为了迎接教主,在一条道路旁,一群Orz教主er穿着文化衫站在道路两旁迎接教主,每件文化衫上都印着大字.一旁的Orzer依次摆出“欢迎欢迎欢迎欢迎……”的 ...
- linux 下用户管理
linux 下用户管理 一.用户的分类 1.超级用户:root UID=0 2.系统用户:不需要登录系统,对应用程序服务,主要维护系统的正常运行:UID = 1 ~ 499(RHEL7 = 1 ~ 9 ...
- 从js的repeat方法谈js字符串与数组的扩展方法
js将字符串重复N次的repeat方法的8个版本 /* *@desc: 将一个字符串重复自身N次 */ //版本1:利用空数组的join方法 function repeat(target, n) { ...
- UVA11584 划分成回文串
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=105116#problem/B 紫书275 题意:输入一个字符,最少能划分几个回文串 分析 ...
- 代码重构-4 通用方法 用 static
只要没有用到 this.变量/方法 的,都可以用static 原代码: private string GetPeriodDesc(int lotteryPeriod) { return EnumHe ...
- MACD、BOLL、KDJ 三大组合精准把握趋势与买卖!
先看示意图,下图是布林线的3个轨道,其他都是股价走势 图1 股价,在布林线上轨.下轨之间运作.准确说,这话是不符合逻辑的,不是先有的轨道,然后股价再按照轨道运动.因为轨道是跟股价同时变化的.但是,股价 ...
- 开源项目剖析之apache-common-pool
前沿 该工程提供了对象池解决方案,该方案主要用于提高像文件句柄,数据库连接,socket通信这类大对象的调用效率.简单的说就是一种对象一次创建多次使用的技术. 整体结构 整个项目有三个包分别是org. ...
- git基础知识总结
1,clone git clone https://github.com/KoMiles/helloword helloword 2,pull git pull 3,commit git commit ...
- 构建seajs业务模块之grunt VS spm build
在最开始,我并不知道grunt可以构建CMD模块.(以下spm指代spm build) 当时正困惑于如何用spm方便的构建业务模块,后来看到@twinstony (感谢@twinstony的分享)使用 ...