第10周Merge Intervals

来源:互联网 发布:ug四轴联动编程实例 编辑:程序博客网 时间:2024/05/22 22:32

Merge Intervals

Leetcode algorithms problem 56:Merge Intervals

  • 问题描述

    Given a collection of intervals, merge all overlapping intervals.
    For example,
    Given [1,3],[2,6],[8,10],[15,18],
    return [1,6],[8,10],[15,18].

  • 问题提示

  • 思路

    1.直接用迭代器进行两次遍历,当两边区间重叠时父遍历更新数据,子遍历使用erase函数删除数据,最后进行排序,提交显示超时,遂放弃
    2.查看题目的讨论得知思路:先将原vector进行排序,再从最初的数据开始维护一个区间,遍历排序后的vector,当区间重叠时更新维护的最后一个区间,不重叠则将新数据作为维护的最后一个区间。

代码

class Solution {public:    vector<Interval> merge(vector<Interval>& intervals) {        if (intervals.empty()) return vector<Interval>{};        vector<Interval> result;        sort(intervals.begin(), intervals.end(), [](Interval a, Interval b){return a.start < b.start;});        result.push_back(intervals[0]);           for (int i = 1; i < intervals.size(); i++) {            if (result.back().end < intervals[i].start) {                result.push_back(intervals[i]);            }else {                result.back().end = max(result.back().end, intervals[i].end);            }              }        return result;    }};

时间复杂度: O(nlogn)
空间复杂度: O(n)


代码重点

c++11 引入了LAMBDA
第6行中的[](Interval a,Interval b {returna.start < b.start;} 相当于python当中的lambda

原创粉丝点击