class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
vector<vector<int> > res;
sort(intervals.begin(),intervals.end(),[](const auto& u,const auto& v)
{
if(u[0]==v[0])
return u[1]>v[1];
else
return u[0]<v[0];
});
auto it=intervals.begin();
int first=(*it)[0],second=(*it)[1];
for(it++;it!=intervals.end();it++)
{
if((*it)[0]<=second)
second=max(second,(*it)[1]);
else
{
res.push_back({
first,second});
first=(*it)[0];
second=(*it)[1];
}
}
res.push_back({
first,second});
return res;
}
};
不得不说,答案的思路更清晰,对vector的运用也更好。至于双指针,我倒觉得没必要,多此一举
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
vector<vector<int> > res;
sort(intervals.begin(),intervals.end());
for(auto it=intervals.begin();it!=intervals.end();it++)
{
int first=(*it)[0],second=(*it)[1];
if(!res.size()||res.back()[1]<first)
res.push_back({
first,second});
else
res.back()[1]=max(res.back()[1],second);
}
return res;
}
};