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

    June-19-2019
    主要思路是,merge all intervals that have overlap with being-inserted interval
    Edge case比较麻烦。

    • 有可能合并完没有剩下的了,要插入的变成了最后一个,没插入,所以最后要多插入一下
    • 有可能合并完还有剩下的,剩下可以按部就班都插入进去,所以最后不需要多插入一下
      解决这2个CASE的方法就是,第二种的情况下,插入,然后更新待插入的。。这样总会剩下一个。
        public int[][] insert(int[][] intervals, int[] newInterval) {
            if (intervals.length == 0) {
                return new int[][]{newInterval};
            }
    
            List<int[]> tempList = new ArrayList<>();
            for (int i = 0; i < intervals.length; i ++) {
                int[] temp = intervals[i];
                if (temp[1] < newInterval[0]) {
                    tempList.add(temp);
                } else if (temp[0] > newInterval[1]) {
                    // from now on, there won't be any overlaps. 这样不停更新newInterval的好处是,最后会少加1个,因为
                    // 下面ELSE的有一个情况是,一直MERGE到最后,并没有加到tempList里,这样的好处是保持一直,总有最后一个newInterval没加
                    // 换一种想法其实就是,第一个if之后,当做merge interval重新做了一遍。。 
                    tempList.add(newInterval);
                    newInterval = temp;
                } else {
                    // start to encounter overlap, merge all overlaps, newInterval will eventually become merged result
                    newInterval[0] = Math.min(temp[0], newInterval[0]);
                    newInterval[1] = Math.max(temp[1], newInterval[1]);
                }
            }
            int[][] res = new int[tempList.size() + 1][2];
            for (int i = 0; i < tempList.size(); i++) {
                res[i] = tempList.get(i);
            }
            res[tempList.size()] = newInterval;
            return res;
        }
    
  • 相关阅读:
    变量和值的延伸思考
    一念之想--多维数组
    java扫描控制台输入
    java字符转义
    javaee开发工具及环境配置过程
    java数组、泛型、集合在多态中的使用及对比
    flex的Accordion组件头部文本居中显示
    Visual Studio解决方案及项目的配置
    Away3D引擎学习入门笔记
    使用photoshop,把图片背景变成透明
  • 原文地址:https://www.cnblogs.com/reboot329/p/5891278.html
Copyright © 2011-2022 走看看