leetcode 56 合并区间

简介: leetcode 56 合并区间

合并区间


c2b4702a749d47ebafac580da548549f.png按照左边界排序,排序之后局部最优:每次合并都取最大的右边界,这样就可以合并更多的区间了,整体最优:合并所有重叠的区间。

其实就是用合并区间后左边界和右边界,作为一个新的区间,加入到result数组里就可以了。如果没有合并就把原区间加入到result数组。

class Solution {
public:
    static bool compare(vector<int>&a , vector<int>&b)
    {
        return a[0] < b[0];
    }
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        if(intervals.size() <= 1) return intervals;
        vector<vector<int>> result;
        //按照区间左边界排序
        sort(intervals.begin() , intervals.end(),compare);
        //第一个区间作为临时区间
        vector<int> tmp = intervals[0];
        for(int i = 1 ; i< intervals.size() ; i++)
        {
          //如果当前区间和临时区间有重叠
          //取临时区间和当前区间的公共集合作为新的临时区间
            if(tmp[1] >= intervals[i][0])
            {
                tmp[0] = min(tmp[0] , intervals[i][0]);
                tmp[1] = max(tmp[1] , intervals[i][1]);
            }
            else//当临时区间和当前区间不重合
            {
                result.push_back(tmp);//临时区间存入
                tmp = intervals[i];//当前区间为新的临时区间
            }
            if(i==intervals.size()-1)//当前区间是最后一个区间的时候
            {
                 result.push_back(tmp);//存入未存入的临时区间
            }
        }
        return result;
    }
};

二刷

class Solution {
public:
    static bool cmp(vector<int> &a , vector<int> &b)
    {
        return a[0] < b[0];
    }
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        vector<vector<int>> result;
        sort(intervals.begin(),intervals.end(),cmp);
        for(int i=1 ; i<intervals.size() ;i++)
        {
            if(intervals[i][0] <= intervals[i-1][1])
            {
                intervals[i][0] = min(intervals[i][0],intervals[i-1][0]);
                intervals[i][1] = max(intervals[i][1],intervals[i-1][1]);
                intervals[i-1][0] = min(intervals[i][0],intervals[i-1][0]);
                intervals[i-1][1] = max(intervals[i][1],intervals[i-1][1]);
            }
            else
            {
                result.push_back(intervals[i-1]);
            }
        }
        result.push_back(intervals[intervals.size()-1]);
        return result;
    }
};
相关文章
|
算法
Leetcode第57题(插入区间)
LeetCode第57题“插入区间”的解题方法,包括题目描述、示例、算法思路和代码实现,旨在解决将新区间插入有序且不重叠的区间列表中,并合并重叠区间的问题。
292 0
Leetcode第57题(插入区间)
LeetCode第57题插入区间
LeetCode第57题"插入区间"的解题方法,利用原区间集有序的特性,通过三步插入操作,有效实现了新区间的插入和重叠区间的合并。
LeetCode第57题插入区间
|
Java
力扣经典150题第五十八题:合并两个有序链表
力扣经典150题第五十八题:合并两个有序链表
241 2
|
存储 算法 测试技术
力扣经典150题第四十七题:汇总区间
力扣经典150题第四十七题:汇总区间
226 1
|
存储 SQL 算法
高效日程管理:利用区间合并算法优化活动安排【python LeetCode57】
高效日程管理:利用区间合并算法优化活动安排【python LeetCode57】
|
存储 算法 搜索推荐
掌握区间合并:解决实际问题的算法策略和应用案例【python LeetCode题目56】
掌握区间合并:解决实际问题的算法策略和应用案例【python LeetCode题目56】
|
存储 算法 数据可视化
【模拟面试问答】深入解析力扣163题:缺失的区间(线性扫描与双指针法详解)
【模拟面试问答】深入解析力扣163题:缺失的区间(线性扫描与双指针法详解)
|
存储 传感器 算法
LeetCode题目89:格雷码 递归、迭代及位操作在数组合并中的应用
LeetCode题目89:格雷码 递归、迭代及位操作在数组合并中的应用
|
存储 算法 测试技术
力扣经典150题第四十九题:插入区间
力扣经典150题第四十九题:插入区间
229 0
|
存储 算法 测试技术
力扣经典150题第四十八题:合并区间
力扣经典150题第四十八题:合并区间
422 0

热门文章

最新文章