leetcode 56. Merge Intervals (模拟,求相交区间)
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].
思路:扫一遍即可。。
1/* ***********************************************
2Author :111qqz
3Created Time :2017年04月11日 星期二 19时15分30秒
4File Name :56.cpp
5************************************************ */
6/**
7
8 * Definition for an interval.
9
10 * struct Interval {
11
12 * int start;
13
14 * int end;
15
16 * Interval() : start(0), end(0) {}
17
18 * Interval(int s, int e) : start(s), end(e) {}
19
20 * };
21
22 */
23
24class Solution {
25
26public:
27
28 int n;
29 static bool cmp(Interval A,Interval B)
30 {
31 return A.start<B.start;
32 }
33 vector<Interval> merge(vector<Interval>& pi) {
34 vector<Interval>res;
35 n = pi.size();
36 if (n==0) return res;
37 sort(pi.begin(),pi.end(),cmp);
38 int l = -1,r = -1;
39 for ( int i = 0 ; i < n ; i++)
40 {
41 if (l==-1&&r==-1)
42 {
43 l = pi[0].start;
44 r = pi[0].end;
45 continue;
46 }
47 if (pi[i].start<=r)
48 {
49 r = max(r,pi[i].end);
50 continue;
51 }
52 if (pi[i].start>r)
53 {
54 res.push_back(Interval(l,r));
55 l = pi[i].start;
56 r = pi[i].end;
57 continue;
58 }
59 }
60 //最后一组不要忘记
61 res.push_back(Interval(l,r));
62 int siz = res.size();
63 for ( int i = 0 ; i < siz ;i++) printf("%d ",res[i].start,res[i].end);
64
65
66 return res;
67
68 }
69
70};