合并区间

来源:互联网 发布:淘宝818会有活动吗 编辑:程序博客网 时间:2024/06/04 18:53

给出若干闭合区间,合并所有重叠的部分。

样例

给出的区间列表 => 合并后的区间列表:

[                     [  [1, 3],               [1, 6],  [2, 6],      =>       [8, 10],  [8, 10],              [15, 18]  [15, 18]            ]

]

代码:/** * Definition of Interval: * classs Interval { *     int start, end; *     Interval(int start, int end) { *         this->start = start; *         this->end = end; *     } */class Solution {public:    /**     * @param intervals: interval list.     * @return: A new interval list.     */      static bool cmp(const Interval &a, const Interval &b)      {          return a.start < b.start;      }      vector<Interval> merge(vector<Interval> &intervals) {        // write your code here         vector<Interval> qq;          int n = intervals.size();          if (n < 1)          {              return qq;          }          sort(intervals.begin(), intervals.end(), cmp);          int left = intervals[0].start;          int right = intervals[0].end;          for (int i = 1; i < n; i++)          {              if (intervals[i].start <= right)              {                  right = max(right, intervals[i].end);              }              else              {                  qq.push_back(Interval(left, right));                  left = intervals[i].start;                  right = intervals[i].end;              }                      }         qq.push_back(Interval(left, right));        return qq;      }  };

感想:本题难点在于先按照区间第一个数字大小排序,然后写一个比较函数来判断区间是否重叠,若重叠,则在一个新的数组中加上修改后的数组,直到没有

重叠的区间。

原创粉丝点击