zoukankan      html  css  js  c++  java
  • 合并区间 · Merge Intervals & 插入区间 · Insert Interval

    [抄题]:

    给出若干闭合区间,合并所有重叠的部分。

    给出的区间列表 => 合并后的区间列表:

    [                     [
      [1, 3],               [1, 6],
      [2, 6],      =>       [8, 10],
      [8, 10],              [15, 18]
      [15, 18]            ]
    ]

     [暴力解法]:

    时间分析:

    空间分析:

    [思维问题]:

    [一句话思路]:

    区间类问题,先把起点排序才能具有逐个合并的能力和性质

    [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

    [画图]:

    [一刷]:

    1. lambda表达式是调用了Comparator对象的.comparing方法进行的

    [二刷]:

    [三刷]:

    [四刷]:

    [五刷]:

      [五分钟肉眼debug的结果]:

    [总结]:

    [复杂度]:Time complexity: O(n) Space complexity: O(n)

    [英文数据结构或算法,为什么不用别的数据结构或算法]:

    List<Interval> ans = new LinkedList<Interval>(); 原来还有interval型的数据,只要实现了list能往后添加就行

    [其他解法]:

    [Follow Up]:

    [LC给出的题目变变变]:

    495. Teemo Attacking 

     [代码风格] :

    public class Solution {
        /*
         * @param intervals: interval list.
         * @return: A new interval list.
         */
        public List<Interval> merge(List<Interval> intervals) {
            List<Interval> ans = new LinkedList<Interval>();
            //sort
            intervals.sort(Comparator.comparing(i -> i.start));//
            //merge
            Interval last = null;
            for (Interval item : intervals) {
                if (last == null || last.end < item.start) {
                    ans.add(item);
                    last = item;
                }else {
                    last.end = Math.max(last.end, item.end);
                }
            }
            return ans;
        }
    }
    View Code

    [抄题]:

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

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

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

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

     [暴力解法]:

    一个个比较

    时间分析:

    空间分析:

    [思维问题]:

    先插入,再merge。followup能直接套就直接套,尽量减少改动。属于换一个描述,本质不变。

    [一句话思路]:

    先插入,再merge。

    [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

    [画图]:

    [一刷]:

    [二刷]:

    [三刷]:

    [四刷]:

    [五刷]:

      [五分钟肉眼debug的结果]:

    [总结]:

    循环的对象是item,所以也对item进行插入

    [复杂度]:Time complexity: O(n) Space complexity: O(n)

    [英文数据结构或算法,为什么不用别的数据结构或算法]:

    [其他解法]:

    [Follow Up]:

    [LC给出的题目变变变]:

    715. Range Module线段树

     [代码风格] :

    /**
     * Definition of Interval:
     * public classs Interval {
     *     int start, end;
     *     Interval(int start, int end) {
     *         this.start = start;
     *         this.end = end;
     *     }
     */
    
    
    public class Solution {
        /*
         * @param intervals: Sorted interval list.
         * @param newInterval: new interval.
         * @return: A new interval list.
         */
        public List<Interval> insert(List<Interval> intervals, Interval newInterval) {
            List<Interval> ans = new LinkedList<>();
            
            //insert
            int ind = 0;
            while (ind < intervals.size() && intervals.get(ind).start < newInterval.start) {
                ind++;
            }
            intervals.add(ind, newInterval);
            //merge
            Interval last = null;
            for (Interval item : intervals) {
                if (last == null || last.end < item.start) {
                    ans.add(item);//
                    last = item;
                }else {
                    last.end = Math.max(last.end, item.end);
                }
            }
            
            return ans;
        }
    }
    View Code
  • 相关阅读:
    CART回归树基本原理(具体例子)
    Leetcode 236. 二叉树的最近公共祖先 & 235. 二叉搜索树的最近公共祖先(Python3)
    c和c++的区别
    最小编辑距离python
    判断单链表是否有环,并找出环的入口python
    关键词提取算法-TextRank
    leetcode406 ,131,1091 python
    id3算法python实现
    Relu激活函数的优点
    从 AllocateMessageQueueConsistentHash 看一致性哈希
  • 原文地址:https://www.cnblogs.com/immiao0319/p/8449692.html
Copyright © 2011-2022 走看看