【代码随想录day 31】 力扣 56. 合并区间
视频讲解:https://www.bilibili.com/video/BV1wx4y157nD/?vd_source=a935eaede74a204ec74fd041b917810c
文档讲解:https://programmercarl.com/0056.%E5%90%88%E5%B9%B6%E5%8C%BA%E9%97%B4.html#%E6%80%9D%E8%B7%AF
力扣题目:https://leetcode.cn/problems/merge-intervals/
这道题的这个方法还算比较精妙,直接将每部分的首区间存入结果数组,然后再去更改结果数组最新的数组的右区间,就避免了初始化一个数组再存入,更有效率。
class Solution {
public:static bool cmp(const vector<int> &a, const vector<int> &b){if(a[0] == b[0]){return a[1] < b[1];}return a[0] < b[0];}vector<vector<int>> merge(vector<vector<int>>& intervals) {vector<vector<int>> result;sort(intervals.begin(), intervals.end(), cmp);//第一个区间可以直接放进去result.push_back(intervals[0]);//遍历更新result的右边界for(int i = 0; i < intervals.size(); ++i){//如果有相交,取maxif(intervals[i][0] <= result.back()[1]){result.back()[1] = max(result.back()[1], intervals[i][1]);}//如果没有相交,直接存入新的数组,后续更新新数组的右边界else{result.push_back(intervals[i]);}}return result;}
};