您的位置:首页 > 其它

LeetCode 56 Merge Intervals

2016-03-29 16:50 323 查看
题意:给出n个区间,合并重复的区间。

思路:对所有区间排序,从左到右扫一遍,记录当前所能达到的最左端和最右端。

注意因为cmp函数写在类中,会默认带一个参数this指针指向当前对象,这就和要求的cmp比较函数多了一个参数,所以可以把cmp函数改为静态的。

/**
* Definition for an interval.
* struct Interval {
* int start;
* int end;
* Interval() : start(0), end(0) {}
* Interval(int s, int e) : start(s), end(e) {}
* };
*/
class Solution {
public:
static bool cmp(const Interval& A, const Interval& B) {
return A.start == B.start ? A.end < B.end : A.start < B.start;
}
vector<Interval> merge(vector<Interval>& intervals) {
vector<Interval> ans;
sort(intervals.begin(), intervals.end(), cmp);
if (intervals.empty())
return ans;
int l = intervals[0].start, r = intervals[0].end;
for (int i = 0; i < intervals.size(); i++) {
if (intervals[i].start <= r)
r = max(r, intervals[i].end);
else {
ans.push_back(Interval(l, r));
l = intervals[i].start;
r = intervals[i].end;
}
}
ans.push_back(Interval(l, r));
return ans;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode