Leetcode-56 合并区间

╄→尐↘猪︶ㄣ 提交于 2020-01-25 10:06:23

二维Vector的使用Tips

  • 初始化与赋值
vector<vector<int>> res;//默认是[]
vector<vector<int>> intervals={{1,4},{2,3}};
  • 添加元素
res.push_back({1,2,3});
     bool comp(const vector<int> &a, const vector<int> &b){
        return a[0] < b[0];
     }
	sort(intervals.begin(),intervals.end(),comp);//默认也是这样的,按第一个数去排

这道题最让我悲伤的是我都快毕业了,写排还是想写冒泡,为我的莽撞自罚一杯。
选两个数组记录区间左右,进行排序,锁定左端点,更新i,看其中能找到的右端点范围可以包含几个区间

class Solution {
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        vector<vector<int>> res;
        if(intervals.empty()) return res;
        int len=intervals.size();
        vector<int> left(len,0);
        vector<int> right(len,0);
        int lf,rt;
        for(int i=0;i<len;i++)
        {
            left[i]=intervals[i][0];
            right[i]=intervals[i][1];
        }
        for(int i=0;i<len;i++)
        {
            for(int j=0;j<len-i-1;j++)
            {
                if(left[j]>left[j+1])
                {
                    swap(left[j],left[j+1]);
                    swap(right[j],right[j+1]);
                }
            }
        }
        for(int i=0;i<len;i++)
        {
            lf=left[i];
            rt=right[i];
            while(i<len-1&&(rt>=left[i+1]))
            {
                i++;
                if(right[i]>=rt)
                    rt=right[i];
            }
            res.push_back({lf,rt});
        }
       return res;
    }
};

使用了一些技巧之后

思路没变,只是排序与比较均在intervals中完成,将合并后的值导到res中。

class Solution {
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        vector<vector<int>> res;
        int lf,rt;
        if(intervals.empty()) return res;
        sort(intervals.begin(),intervals.end());
        for(int i=0;i<intervals.size();i++)
        {
            lf=intervals[i][0];
            rt=intervals[i][1];
            while(i<intervals.size()-1&&(rt>=intervals[i+1][0]))
            {
                i++;
                if(intervals[i][1]>=rt)
                    rt=intervals[i][1];
            }
            res.push_back({lf,rt});
        }
       return res;
    }
};

在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!