zoukankan      html  css  js  c++  java
  • lintcode:插入区间

    题目:

    给出一个无重叠的按照区间起始端点排序的区间列表。

    在列表中插入一个新的区间,你要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。

    样例

    插入区间[2, 5] 到 [[1,2], [5,9]],我们得到 [[1,9]]

    插入区间[3, 4] 到 [[1,2], [5,9]],我们得到 [[1,2], [3,4], [5,9]]

    解题:

    参考合并区间思想,可以将插入区间插入到列表中,再按照合并区间的思想解题

    class Solution {
        /**
         * Insert newInterval into intervals.
         * @param intervals: Sorted interval list.
         * @param newInterval: A new interval.
         * @return: A new sorted interval list.
         */
        public ArrayList<Interval> insert(ArrayList<Interval> intervals, Interval newInterval) {
             ArrayList<Interval> result = new ArrayList<Interval>();
             if(intervals == null || intervals.size() <=0){
                 result.add(newInterval);
                 return result;
             }
             intervals.add(newInterval);
             Collections.sort(intervals,new IntervalComparator());
             Interval last = intervals.get(0);
             for(int i = 1;i<intervals.size();i++){
                 Interval cur = intervals.get(i);
                 if(last.end>= cur.start){
                     last.end = Math.max(last.end,cur.end);
                 }else{
                     result.add(last);
                     last = cur;
                 }
             }
             result.add(last);
             return result;
        }
        private class IntervalComparator implements Comparator<Interval>{
            public int compare(Interval a,Interval b){
                return a.start - b.start;
            }
        }
    }

    原始已经有序,新加入元素后重新排序,没有这个必要了。

    /**
     * Definition of Interval:
     * public classs Interval {
     *     int start, end;
     *     Interval(int start, int end) {
     *         this.start = start;
     *         this.end = end;
     *     }
     */
    
    class Solution {
        /**
         * Insert newInterval into intervals.
         * @param intervals: Sorted interval list.
         * @param newInterval: A new interval.
         * @return: A new sorted interval list.
         */
    
        public ArrayList<Interval> insert(ArrayList<Interval> intervals, Interval newInterval) {
            ArrayList<Interval> result = new ArrayList<Interval>();
            // write your code here
            if(intervals==null ||intervals.size()<=0){
                 result.add(newInterval);
                return result;
            }
            int insertPos = 0;
            for(int i=0;i<intervals.size();i++){
                Interval curt = intervals.get(i);
                if(curt.end<newInterval.start){// 不相交 cur 后插入新区间
                    result.add(curt);
                    insertPos++;
                } else if(curt.start>newInterval.end){// 不相交 cur 前插入新区间
                    result.add(curt);
                }else{
                    newInterval.start = Math.min(curt.start,newInterval.start);
                    newInterval.end = Math.max(curt.end,newInterval.end);
                }
                
            }
            result.add(insertPos,newInterval);
            return result;
        }
    }

    参考:http://www.jiuzhang.com/solutions/insert-interval/

  • 相关阅读:
    jquery 实现 html5 placeholder 兼容password密码框
    php返回json的结果
    使用PHP读取远程文件
    Sharepoint 自定义字段
    Sharepoint 中新增 aspx页面,并在页面中新增web part
    【转】Sharepoint 2010 配置我的站点及BLOG
    JS 实现 Div 向上浮动
    UserProfile同步配置
    【转】Import User Profile Photos from Active Directory into SharePoint 2010
    Sharepoint 2010 SP1升级后 FIMSynchronizationService 服务无法开启
  • 原文地址:https://www.cnblogs.com/bbbblog/p/4883586.html
Copyright © 2011-2022 走看看