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/

  • 相关阅读:
    【超详细教程】使用Windows Live Writer 2012和Office Word 2013 发布文章到博客园全面总结
    Jquery+asp.net后台数据传到前台js进行解析的方法
    OWASP Top 10 – 2013, 最新十大安全隐患(ASP.NET解决方法)
    Owasp Top 10 Security Risks for 2014
    js中cookie的使用详细分析
    Cookie/Session机制详解
    ASP.NET Web API 简介
    未找到具有固定名称“System.Data.SQLite”的 ADO.NET 提供程序的实体框架提供程序
    网页被Chrome识别成英语,区域,语言,网站
    16进制字符串转换为byte数组
  • 原文地址:https://www.cnblogs.com/bbbblog/p/4883586.html
Copyright © 2011-2022 走看看