2015.04.01 Leetcode Insert interval
来源:互联网 发布:sql 计算查询结果合计 编辑:程序博客网 时间:2024/05/29 00:33
Insert Interval解法:
先用start,end两个变量来定位 newinterval可能要插入的起始点和结束点。 分三种情况来看是否需要调整或合并(merge)。
case1: 在start 之前直接copy 到结果res; case2: 在end之后也是直接copy到res中; case3: 需要合并的就是newInterval.start, newInterval.end, 和任选的一个interval 的interval.start , interval.end 四个边界的比较。 下面是源代码 和我的github链接https://github.com/hustbill/java-OJ/blob/master/InsertInterval.java
<pre name="code" class="java">/*https://leetcode.com/problems/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].*//** * Definition for an interval. * public class Interval { * int start; * int end; * Interval() { start = 0; end = 0; } * Interval(int s, int e) { start = s; end = e; } * } */import java.util.ArrayList;import java.util.List;import java.util.Collections;import java.util.Comparator;import java.util.*;public class InsertInterval { /** * In place solution * Find start and end point of the interval to be merged */ public static List<Interval> insert(List<Interval> intervals, Interval newInterval) {List<Interval> res = new ArrayList<Interval>(); if (intervals == null||intervals.size() == 0){ res.add(newInterval); return res; }int start=0, end = 0; // find the insert position for newInterval , to be insert or mergedfor( Interval interval : intervals) {if(newInterval.start > interval.end) start++;if(newInterval.end >= interval.start) end++; else break;}if(start== end) { // no need merge, just copy all intervals into resres.addAll(intervals);res.add(start, newInterval) ; // insert the new onereturn res;}for(int i=0; i< start; i++) res.add(intervals.get(i));// intervl and newInterval are a closer rangeInterval interval = new Interval( Math.min( intervals.get(start).start, newInterval.start),Math.max( intervals.get(end-1).end, newInterval.end)); // note that, it's end-1res.add(interval);for(int j=end; j< intervals.size(); j++) {res.add(intervals.get(j)); // after the newInterval insert, copy the remains into res}return res;}public static void testCase1() {// Case 1:System.out.println("Case 1");Interval interval0 = new Interval(1,2);// Interval interval0 = new Interval(0,1);Interval interval1 = new Interval(3,5);Interval interval2 = new Interval(6, 7);Interval interval3 = new Interval(8, 10);Interval interval4 = new Interval(12, 16);List<Interval> intervals = new ArrayList<Interval>();intervals.add(interval0);intervals.add(interval1);intervals.add(interval2);intervals.add(interval3);intervals.add(interval4);printIntervals(intervals);Interval newInterval_1 = new Interval(4,9);// Interval newInterval_1 = new Interval(4,11);System.out.println("\nstart Insert newInterval_1 : " + newInterval_1.start + " , " + newInterval_1.end);intervals = insert(intervals, newInterval_1);printIntervals(intervals);}public static void testCase2() {// Case 2System.out.println("\n\nCase 2");Interval interval5 = new Interval(0, 1);Interval interval6 = new Interval(4, 9);List<Interval> intervals2 = new ArrayList<Interval>();intervals2.add(interval5);intervals2.add(interval6);printIntervals(intervals2);Interval newInterval_2 = new Interval(2,5); System.out.println("start Insert newInterval2 : " + newInterval_2.start + " , " + newInterval_2.end);intervals2 = insert(intervals2, newInterval_2);printIntervals(intervals2);}public static void testCase3() {// Case 3System.out.println("\n\nCase 3");Interval interval5 = new Interval(1, 5);List<Interval> intervals2 = new ArrayList<Interval>();intervals2.add(interval5);printIntervals(intervals2);Interval newInterval_2 = new Interval(2,3); System.out.println("start Insert newInterval2 : " + newInterval_2.start + " , " + newInterval_2.end);intervals2 = insert(intervals2, newInterval_2);//printIntervals(intervals2);}public static void main(String[] args){testCase1(); testCase2(); testCase3();}public static void printIntervals(List<Interval> intervals) {//System.out.println(intervals);for (int i = 0; i < intervals.size(); i++) { System.out.println("Index: " + i + " - Item: " + intervals.get(i).start + " "+ intervals.get(i).end);}}}
0 0
- 2015.04.01 Leetcode Insert interval
- 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
- java 求二叉树的深度
- 请区别对待女程序员 .
- 咦,你也在混日子啊 .
- 那些害死程序员的细节 .
- 上课觉得刚好鬼离开家就很尴尬
- 2015.04.01 Leetcode Insert interval
- 坑坑的程序员
- [LinkedIn] Word Distance Finder (Find distance in dictionary)
- 一切成功源于积累——20150401 黄金 2800点
- [LeetCode]Two Sum
- ruby on rails rotate log file(日志文件)
- [LinkedIn] String Permutation
- ADSL拨号
- Best Time to Buy and Sell Stock IV