zoukankan      html  css  js  c++  java
  • 57. Insert Interval

    一、题目

      1、审题

      

      2、分析

        给出一组不重叠的间隔数字组成的数组,将一个新的间隔数组插入原来的数组,有重叠的部分则进行合并。

    二、解答

      1、思路:

        方法一、将 newInterval 插入原来的 List,再将 List 的数组进行重叠部分的合并。

      

    public List<Interval> insert(List<Interval> intervals, Interval newInterval) {
            
            intervals.add(newInterval);
                
            Collections.sort(intervals, new Comparator<Interval>() {
                @Override
                public int compare(Interval o1, Interval o2) {
                    return o1.start - o2.start;
                }
            });
            
            List<Interval> resultList = new ArrayList<Interval>();
            int start = intervals.get(0).start;
            int end = intervals.get(0).end;
            
            for(int i = 1; i < intervals.size(); i++) {
                Interval tmpInterval = intervals.get(i);
                if(end >= tmpInterval.start)    // 重叠
                    end = Math.max(end, tmpInterval.end);
                else {
                    resultList.add(new Interval(start, end));
                    start = tmpInterval.start;
                    end = tmpInterval.end;
                }
            }
            resultList.add(new Interval(start, end));
            return resultList;
        }

      

      方法二、 将 newInterval 与原 List 中的元素依次进行比较合并,可以分为三种情况:

          ①、List中 的 end < newInterval.start ,则没有重叠部分;

          ②、跳出①的循环后(已经开始有重叠的了),若 List 中 start <= newInterval.end, 则表示有重叠部分;

          ③、跳出②循环后,则 List 中剩下的元素与 newInterval 无重叠部分了。

    public List<Interval> insert(List<Interval> intervals, Interval newInterval) {
            
            List<Interval> result = new LinkedList<>();
            
            int i = 0;
            int len = intervals.size();
            
            // add all ending before newInterval starts
            while(i < len && intervals.get(i).end < newInterval.start)    
                result.add(intervals.get(i++));
            
             // merge all overlapping intervals to newInterval
            while(i < len && intervals.get(i).start <= newInterval.end) {
                newInterval = new Interval(
                        Math.min(newInterval.start, intervals.get(i).start),
                        Math.max(newInterval.end,  intervals.get(i).end));
                i++;
            }
            result.add(newInterval);
            
            // add the rest;
            while(i < len)
                result.add(intervals.get(i++));
            
            return result;
        
        }
  • 相关阅读:
    除去String字符串里面指定的字符串
    JSON总结(java篇)
    关于tomcat文件下载配置
    在多行列表中id同名的<a>标签点击事件处理方法
    java Properties异常:Malformed uxxxx encoding.
    关于An association from the table refers to an unmapped class
    Java实现Mysql数据库自动备份
    Could not publish server configuration for Tomcat v6.0 Server at localhost.
    MySQL备份命令mysqldump参数说明与示例
    图解 | 原来这就是网络
  • 原文地址:https://www.cnblogs.com/skillking/p/9660424.html
Copyright © 2011-2022 走看看