博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
57 Insert Interval
阅读量:7090 次
发布时间:2019-06-28

本文共 1942 字,大约阅读时间需要 6 分钟。

有些hard在于算法难,思路难想;有些hard在于corner case多,这题就是后者。

这题跟56. Merge Intervals是类似的,而且这个是已经排好了顺序给你;但是难度并没有下降,我觉得这种题目就是把所有可能的case都cover到就能AC了,但是往往可能你在纸上画都不一定能画得全,这可能也就是hard的原因(我在纸上画了)。这次我试了一下,一共调试了5次,start和end用max/min比较分别占了一次。这种题我感觉看答案只会被牵着鼻子走,自己要覆盖到所有的corner case才行。另外,一道题如果耗时太长脑力必然会严重下降。所以尽量速战速决。

public List
insert(List
intervals, Interval newInterval) { List
res = new ArrayList<>(); //corner case1 if (intervals.isEmpty()) { res.add(newInterval); return res; } while (!intervals.isEmpty()) { if (intervals.get(0).start < newInterval.start && intervals.get(0).end < newInterval.start) { res.add(intervals.remove(0)); } else { break; } } if (intervals.isEmpty()) { res.add(newInterval); return res; } //这里开始的intervals list第一个元素的end一定比newInterval的start大 //1. won't overlapping if (intervals.get(0).start > newInterval.end) { res.add(newInterval); res.addAll(intervals); return res; } //2. wrapped by the 1st interval if (intervals.get(0).start <= newInterval.start && intervals.get(0).end >= newInterval.end) { res.addAll(intervals); return res; } //3. overlapping Interval head = intervals.get(0); if (head == null) return res; int start = Math.min(head.start, newInterval.start); int end; while (newInterval.end >= head.end && intervals.size() > 1) { intervals.remove(0); head = intervals.get(0); } if (newInterval.end < intervals.get(0).start) { end = newInterval.end; res.add(new Interval(start, end)); res.addAll(intervals); return res; } if (newInterval.end >= intervals.get(0).start) { end = Math.max(intervals.remove(0).end, newInterval.end); res.add(new Interval(start, end)); res.addAll(intervals); return res; } // should have covered all possible cases return null; }复制代码

短的方法见: https://discuss.leetcode.com/topic/7808/short-and-straight-forward-java-solution

转载于:https://juejin.im/post/5a3131f76fb9a0452b493c8d

你可能感兴趣的文章
Excel 点滴积累
查看>>
写一个函数,能获取文件后缀
查看>>
HDU 4349 Xiao Ming's Hope 找规律
查看>>
原生JS编写getByClass、addClass、removeClass、hasClass
查看>>
svn老鸟转用git必须理解的概念
查看>>
wechat-注意事项
查看>>
Element-diag中遮罩
查看>>
【Android游戏开发之六】在SurfaceView中添加组件!!!!并且相互交互数据!!!!...
查看>>
在SUSE LINUX中如何用命令行关闭防火墙?
查看>>
IdentityServer4之Clients、Scopes、Claims与Token关联
查看>>
HTML中拖放介绍
查看>>
BAT面试题系列 基础篇(二) 数组(Array)和列表(ArrayList)的区别?什么时候应该使用Array而不是ArrayList?...
查看>>
(转)淘宝技术发展
查看>>
Masonry学习分享
查看>>
跨域 - jsonp轻松搞定跨域请求
查看>>
[转载]我的Java后端书架 (2016年暖冬4.0版)
查看>>
操作系统常见面试题
查看>>
linux常用命令 history命令
查看>>
Angular4.x跨域请求
查看>>
ORA-02292违反完整约束和ORA-02297无法禁用约束条件 cascade禁用主键
查看>>