Leetcode - insert interval
来源:互联网 发布:linux 网页中文乱码 编辑:程序博客网 时间:2024/04/30 01:54
这题应该清楚List是ArrayList还是LinkedList,ArrayList的话二分来查找更快,而LinkedList的话,直接线性遍历一遍即可。看了其他人的结题报告,基本线性一遍就可以过了。
然后注意各种边界条件即可:
1: newinterval 和intervals没有重合
2: newinterval和intervals重合。
import java.util.*; public class Solution { int bSearch(List<Interval> intervals, int val){int n = intervals.size() ;if(val < intervals.get(0).start){return -1;}else if(val > intervals.get(n-1).start){return n-1;}int l = 0;int r = n-1;int m = -2;while(l<=r){m = (l+r)>>1;if( intervals.get(m).start <= val && (m >= n -1 || val < intervals.get(m+1).start))return m;else if(intervals.get(m).start > val)r = m -1;elsel = m + 1;}return m;} public List<Interval> insert(List<Interval> intervals, Interval newInterval) {int n = intervals.size() ;if(n == 0){intervals.add(newInterval);return intervals;} int kb = bSearch(intervals, newInterval.start); int ke = bSearch(intervals, newInterval.end); if(kb == ke) { if(kb == -1) intervals.add(0,newInterval); else if(newInterval.start > intervals.get(kb).end) intervals.add(kb+1,newInterval); else intervals.get(ke).end = (intervals.get(ke).end > newInterval.end) ? intervals.get(ke).end : newInterval.end; return intervals; } if(kb == -1) { kb++; intervals.get(0).start = newInterval.start; } else if(intervals.get(kb).end < newInterval.start) { kb++; intervals.get(kb).start = newInterval.start; } intervals.get(kb).end = (intervals.get(ke).end > newInterval.end) ? intervals.get(ke).end : newInterval.end; for(int i = kb+1;i<=ke;i++) { intervals.remove(kb+1); } return intervals; } public static void main(String[] args) { List<Interval> intervals = new ArrayList<Interval>(); intervals.add(new Interval(1,5)); intervals.add(new Interval(9,12)); intervals.add(new Interval(20,22)); Solution sol = new Solution(); sol.insert(intervals, new Interval(10,15)); for(Interval interval : intervals) { System.out.println(interval.start + " " + interval.end); } }}
0 0
- LeetCode: Insert Interval & Merge Interval
- LeetCode题目 Insert Interval
- LeetCode: Insert Interval
- LeetCode Insert Interval
- LeetCode: Insert Interval
- Leetcode: Insert Interval
- [LeetCode] Insert Interval
- LeetCode Insert Interval
- [LeetCode]Insert Interval
- leetcode insert interval
- [leetcode]Insert Interval
- LeetCode-Insert Interval
- [leetcode] Insert Interval
- LeetCode - Insert Interval
- 【leetcode】Insert Interval
- leetcode Insert Interval
- 【leetcode】Insert Interval
- LeetCode Insert Interval
- 一个例子入门Linux进程间通信
- 【美式混搭小清新两居室】真真被这样温馨满满的家感动到了!
- Windows cmd命令行下常用MySQL命令
- 【Web 前端】小练习
- UVA - 558 Wormholes (Bellman-ford)
- Leetcode - insert interval
- QT+OPENCV环境配置
- 扩展方法略好于帮助方法
- 基于Android的短信应用开发(七)——导航栏ActionBar显示与短信会话删除
- Windows驱动_WFP之一WFP是什么
- 词法分析
- Android 源码文件结构
- Android Camera TakePicture过程分析
- java中的 i++ 与 C中的 i++ 的区别