2023.8.4
开始思路是原地修改数组,结果超时了,代码如下:
class Solution {
public:static bool cmp(vector<int>& a , 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) {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.erase(intervals.begin()+i-1);i--;}} return intervals;}
};
没法原地修改,只能重新建一个二维数组vector。 代码如下:
class Solution {
public:static bool cmp(vector<int>& a , 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) {sort(intervals.begin(),intervals.end(),cmp);vector<vector<int>> ans;ans.push_back(intervals[0]);for(int i=1; i<intervals.size(); i++){if(intervals[i][0] <= ans.back()[1]){ans.back()[1] = max(ans.back()[1],intervals[i][1]);}else{ans.push_back(intervals[i]);}}return ans;}
};
ps:当重叠时,只需要更新右边界,因为我们排序的时候是按左边界从小到大排序的。