zoukankan      html  css  js  c++  java
  • 19.2.8 [LeetCode 56] Merge Intervals

    Given a collection of intervals, merge all overlapping intervals.

    Example 1:

    Input: [[1,3],[2,6],[8,10],[15,18]]
    Output: [[1,6],[8,10],[15,18]]
    Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6].
    

    Example 2:

    Input: [[1,4],[4,5]]
    Output: [[1,5]]
    Explanation: Intervals [1,4] and [4,5] are considered overlapping.

    题意

    合并重合的闭区间

    题解

     1 bool operator <(const Interval& a, const Interval& b) {
     2     if (a.start == b.start)
     3         return a.end > b.end;
     4     return a.start < b.start;
     5 }
     6 
     7 class Solution {
     8 public:
     9     vector<Interval> merge(vector<Interval>& intervals) {
    10         if (intervals.size()<=1)return intervals;
    11         set<Interval>q;
    12         while (!intervals.empty()) {
    13             Interval now = intervals.back();
    14             intervals.pop_back();
    15             q.insert(now);
    16         }
    17         auto pre = q.begin();
    18         int mm = (*pre).end;
    19         for (auto p = q.begin(); p != q.end(); ) {
    20             if (p != q.begin() && (*p).start <= (*pre).end) {
    21                 mm = max((*p).end, mm);
    22                 auto oldp = p;
    23                 p++;
    24                 q.erase(oldp);
    25             }
    26             else if (p != q.begin()) {
    27                 int star = (*pre).start;
    28                 q.erase(pre);
    29                 q.insert(Interval(star, mm));
    30                 if ((*p).start <= mm) 
    31                     pre = q.find(Interval(star, mm));
    32                 else {
    33                     pre = p;
    34                     p++;
    35                 }
    36                 mm = (*pre).end;
    37             }
    38             else p++;
    39         }
    40         if ((*pre).end < mm) {
    41             q.insert(Interval((*pre).start, mm));
    42             q.erase(pre);
    43         }
    44         return vector<Interval>(q.begin(),q.end());
    45     }
    46 };
    View Code
  • 相关阅读:
    构建之法阅读笔记03
    构建之法阅读笔记02
    构建之法读书笔记01
    梦断代码读书笔记03
    背包九讲问题
    C-01背包问题
    C-最长回文子串(2)
    C-最长回文子串(1)
    C语言顺序栈实现
    带头结点头部插入创建链表
  • 原文地址:https://www.cnblogs.com/yalphait/p/10356600.html
Copyright © 2011-2022 走看看