Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).
You may assume that the intervals were initially sorted according to their start times.
Example 1:
Given intervals [1,3],[6,9], insert and merge [2,5] in as [1,5],[6,9].
Example 2:
Given [1,2],[3,5],[6,7],[8,10],[12,16], insert and merge [4,9] in as [1,2],[3,10],[12,16].
This is because the new interval [4,9] overlaps with [3,5],[6,7],[8,10].
Subscribe to see which companies asked this question
思路分析:
The use of std::sort to sort the vector, need to define a compare function, which need to be static. (static bool myfunc() ) The sort command should be like this: std::sort(intervals.begin,intervals.end, Solution::myfunc); otherwise, it won't work properly.
/*
Given a collection of intervals, merge all overlapping intervals.
For example,
Given [1,3],[2,6],[8,10],[15,18],
return [1,6],[8,10],[15,18].
*/
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Interval
{
int start;
int end;
Interval() : start(0), end(0) {}
Interval(int s, int e) : start(s), end(e) {}
};
class Solution_056_MergeIntervals
{
public:
static bool myfunc(const Interval &a, const Interval &b)
{
return (a.start < b.start);
}
vector<Interval> merge(vector<Interval> &intervals)
{
vector<Interval> res;
if (intervals.size() == 0)
{
return res;
}
sort(intervals.begin(), intervals.end(), myfunc);
res.push_back(intervals[0]);
for (int i = 1; i < intervals.size(); i++)
{
/*
a_____b
c____d
或者
a____b
c_d
*/
if (res.back().end >= intervals[i].start)
{
res.back().end = max(res.back().end, intervals[i].end);
}
/*
a____b
c____d
*/
else
{
res.push_back(intervals[i]);
}
}
return res;
}
};
297



被折叠的 条评论
为什么被折叠?



