题目:56
题意:给定一个区间集合,合并所有重叠的区间
题解:先将区间集合排序后,逐一比较当前区间左端点与前一区间右端点,如果比前一区间右端点小,则可以合并
代码:
class Solution {
public:
//注意,cmp函数写在类里面,需要加static
static bool cmp(vector<int> a, vector<int> b) {
if (a[0] != b[0])return a[0] < b[0];
return a[1] < b[1];
}
vector<vector<int>> merge(vector<vector<int>>& intervals) {
vector<vector<int> > ans;
sort(intervals.begin(), intervals.end(), cmp);
int cnt = 0;
for (int i = 0; i < intervals.size(); i++) {
if (i == 0)ans.push_back(intervals[i]);
if (intervals[i][0] <= ans[cnt][1])
ans[cnt][1] = max(intervals[i][1], ans[cnt][1]);
else
{
ans.push_back(intervals[i]);
cnt++;
}
}
return ans;
}
};
后记:因为是从小到大,sort内部对于vector大小就是从第一个元素逐一比较,所以可以直接使用系统内部排序,不需要自定义比较函数