合并区间C++

Posted 顾文繁

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了合并区间C++相关的知识,希望对你有一定的参考价值。

给出一组区间,请合并所有重叠的区间。
请保证合并后的区间按区间起点升序排列。
要求:空间复杂度 O(n)O(n),时间复杂度 O(nlogn)O(nlogn)
进阶:空间复杂度 O(val)O(val),时间复杂度O(val)O(val)
输入:
[[10,30],[20,60],[80,100],[150,180]]
输出
[[10,60],[80,100],[150,180]]

思路:先排序,排序好的区间只有两种可能:

1.两个区间重合

如果区间有交集,判断第二个的右区间是否大于结果集中的右区间,如果大于,说明两个区间是交叉的,如果小于说明包含。

2.两个区间不重合,直接添加到结果集合中去。

/**
 * Definition for an interval.
 * struct Interval 
 *     int start;
 *     int end;
 *     Interval() : start(0), end(0) 
 *     Interval(int s, int e) : start(s), end(e) 
 * ;
 */
class Solution 
public:
    static bool cmp(Interval& a, Interval& b)
    
        return a.start < b.start;
    
    
    vector<Interval> merge(vector<Interval> &intervals) 
        if(intervals.size() == 0) return ;
        sort(intervals.begin(), intervals.end(), cmp);
        //排序后的第一个一定是最小的
        vector<Interval> ret;
        ret.push_back(intervals[0]);
        for(int i = 1;i < intervals.size();i++)
        
            // 相等时,也合并
            if(intervals[i].start <= ret.back().end)
            
                ret.back().end = max(ret.back().end, intervals[i].end);
            else
            
                ret.push_back(intervals[i]);
            
        
        return ret;
    
;

以上是关于合并区间C++的主要内容,如果未能解决你的问题,请参考以下文章

华为机试真题 C++ 实现区间交集

leetcode| 56. 合并区间

C++中怎样把两个升序数组合并

56. 合并区间

精选力扣500题 第18题 LeetCode 23. 合并K个升序链表c++详细题解

合并区间范围