zoukankan      html  css  js  c++  java
  • 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].

    解决思路

    分三部分:

    1. 把之前的较小区间加入list;

    2. 更新重叠的区间的start和end,并加入新的区间;

    3. 将剩余的区间加入。

    程序

    public class Solution {
        public List<Interval> insert(List<Interval> intervals, Interval newInterval) {
            if (newInterval == null) {
                return intervals;
            }
            List<Interval> merge = new ArrayList<Interval>();
            if (intervals.size() == 0) {
                merge.add(newInterval);
                return merge;
            }
            
            int i = 0, n = intervals.size();
            // add smaller
            while (i < n && intervals.get(i).end < newInterval.start) {
                merge.add(intervals.get(i++));
            }
            // merge
            while (i < n && intervals.get(i).start <= newInterval.end) {
                newInterval.start = Math.min(newInterval.start, intervals.get(i).start);
                newInterval.end = Math.max(newInterval.end, intervals.get(i).end);
                ++i;
            }
            merge.add(newInterval);
            // add last
            while (i < n) {
                merge.add(intervals.get(i++));
            }
            return merge;
        }
    }
    

    Follow up

    Merge Intervals

    Given a collection of intervals, merge all overlapping intervals.

    For example,
    Given [1,3],[2,6],[8,10],[15,18],
    return [1,6],[8,10],[15,18]

    解决思路

    1. 排序,从小到大;

    2. merge。

    程序

    public class Solution {
        public List<Interval> merge(List<Interval> intervals) {
    		List<Interval> mergeList = new ArrayList<Interval>();
    		if (intervals == null || intervals.isEmpty()) {
    			return mergeList;
    		}
    		
    		sortedIntervalsList(intervals);
    		mergeList.add(intervals.get(0));
    		
    		for (int i = 1; i < intervals.size(); i++) {
    			Interval last = mergeList.get(mergeList.size() - 1);
    			Interval insert = intervals.get(i);
    			if (insert.start <= last.end) {
    				last.end = Math.max(last.end, insert.end);
    			} else {
    				mergeList.add(insert);
    			}
    		}
    		
    		return mergeList;
    	}
    
    	private void sortedIntervalsList(List<Interval> intervals) {
    		Comparator<Interval> comp = new Comparator<Interval>() {
    			@Override
    			public int compare(Interval i1, Interval i2) {
    				if (i1.start > i2.start) {
    					return 1;
    				} else if (i1.start < i2.start) {
    					return -1;
    				}
    				if (i1.end > i2.end) {
    					return 1;
    				} else if (i1.end < i2.end) {
    					return -1;
    				}
    				return 0;
    			}
    		};
    		Collections.sort(intervals, comp);
    	}
    }
    

      

  • 相关阅读:
    VBScript 函数
    C#创建activex供js调用
    java调用jni
    vbscript基本语法
    javascript 与vbscript 互相调用
    java调用jni
    mysql 无权限修改user 【修改root密码问题】
    vbscript基本语法
    js九九乘法表
    100~999之间的水仙花数
  • 原文地址:https://www.cnblogs.com/harrygogo/p/4691613.html
Copyright © 2011-2022 走看看