题意:给出一个区间的集合,请合并所有重叠的区间。 https://leetcode-cn.com/problems/merge-intervals/
解题思路一:使用排序,开始时间从小至大排序。
1 vector<vector<int>> merge(vector<vector<int>>& intervals) { 2 sort(intervals.begin(),intervals.end()); // sort是什么机制?为什么能够对vector<vector<int>>直接sort,好强; 3 if(intervals.size()<=1){ 4 return intervals; 5 } 6 auto p1=intervals.begin(); 7 auto p2=intervals.begin()+1; 8 while(p2!=intervals.end()){ 9 // 考虑p2[0]和p1[1]的关系 10 if((*p2)[0]<=(*p1)[1]){ 11 int tmp=max((*p2)[1],(*p1)[1]); 12 (*p1)[1]=tmp; 13 } 14 else{ 15 p1++; 16 p1->swap(*p2); 17 } 18 p2++; 19 } 20 intervals.erase(++p1,intervals.end()); 21 return intervals; 22 }