leetcode56——Merge Intervals

题目大意:将给出的区间进行合并,合并原则是有重叠部分的两个区间才能合并

分析:排序的考察。自己写了一会儿,思路的方向是对的,但是忽视了一个细节导致wa,看了下面的代码明白了。要维护left,right,表示的是马上要加入答案的区间边界。当intervals[i].start超过right时,就说明维护的区间结束了,加入答案并更新left和right为intervals[i].start和end,否则就一直更新right即可。我错误的用intervals[i].start和它上一个区间的end比较,没有考虑到此时应该维护的right并不一定是上一区间的end。

代码:转载自https://www.cnblogs.com/wangxiaobao/p/5823947.html

class Solution {
private:
static bool cmp(const Interval& I1, const Interval& I2) {
return I1.start < I2.start;
}
public:
vector<Interval> merge(vector<Interval>& intervals) {
vector<Interval> result;
if (intervals.size() == 0) {
return result;
}
sort(intervals.begin(), intervals.end(), cmp);
int left = intervals[0].start, right = intervals[0].end;
for (int i = 1; i < intervals.size(); ++i) {
if (intervals[i].start <= right) {
right = max(right, intervals[i].end);
}
else {
result.push_back(Interval(left, right));
left = intervals[i].start;
right = intervals[i].end;
}
}
result.push_back(Interval(left, right));
return result;
}
};

猜你喜欢

转载自blog.csdn.net/tzyshiwolaogongya/article/details/80108086
今日推荐