[LeetCode] Merge Intervals 排序sort

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].

Show Tags

Array Sort


  这题其实想好思路很好解决,对于框,如果下个框开始在 其中间,则连在一起,否则单独为一个,这需要按start 排序便可以了,因为类中写自定义比较函数比较麻烦,所以一次写了好几个。

  1. 按start 排序
  2. 初始化变量curstart,curend,记录当前窗的位置。
  3. 与下个窗比较,如果其start < curend,更新 curend。
  4. 否则加入ret,并跟新curstart,curend
  5. 遍历结束,加入最后的窗。

 1 #include <iostream>
 2 #include <vector>
 3 #include <algorithm>
 4 using namespace std;
 5
 6 /**
 7  * Definition for an interval.
 8  */
 9  struct Interval {
10     int start;
11     int end;
12     Interval() : start(0), end(0) {}
13     Interval(int s, int e) : start(s), end(e) {}
14 };
15
16 class Solution {
17 public:
18     vector<Interval> merge(vector<Interval> &intervals) {
19         sort(intervals.begin(),intervals.end(),20              [] (Interval i1,Interval i2)21              {return i1.start<i2.start; });
22
23 ///        sort(intervals.begin(),intervals.end(),help_fun);
24
25 /**        struct my_cmp{
26             bool operator ()(Interval i1,Interval i2){
27                 return i1.start<i2.start;
28             }
29         }my_cmp1;
30         sort(intervals.begin(),intervals.end(),my_cmp());
31         sort(intervals.begin(),intervals.end(),my_cmp1);
32 */
33
34 //        for(int i=0;i<intervals.size();i++){
35 //            cout<<intervals[i].start<<" "<<intervals[i].end<<endl;
36 //        }
37         vector<Interval> ret;
38         if(intervals.size()<1)  return ret;
39         int curStart=intervals[0].start,curEnd=intervals[0].end;
40         for(int i=1;i<intervals.size();i++){
41             if(curEnd>=intervals[i].start){
42                 if(intervals[i].end>curEnd) curEnd=intervals[i].end;
43                 continue;
44             }
45             ret.push_back(Interval(curStart,curEnd));
46             curStart = intervals[i].start;
47             curEnd = intervals[i].end;
48         }
49         ret.push_back(Interval(curStart,curEnd));
50         return ret;
51     }
52
53     static bool help_fun(Interval i1,Interval i2)
54     {
55         return i1.start<i2.start;
56     }
57 };
58
59 int main()
60 {
61     vector<Interval> intervals={Interval(8,10),62                                 Interval(2,6),63                                 Interval(1,3),64                                 Interval(15,18)};
65     Solution sol;
66     vector<Interval> ret = sol.merge(intervals);
67
68     for(int i=0;i<ret.size();i++){
69         cout<<ret[i].start<<" "<<ret[i].end<<endl;
70     }
71     return 0;
72 }

时间: 2024-10-13 03:28:40

[LeetCode] Merge Intervals 排序sort的相关文章

LeetCode: Merge Intervals [055]

[题目] Given an array of non-negative integers, you are initially positioned at the first index of the array. 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].

[leetcode]Merge Intervals @ Python

原题地址:https://oj.leetcode.com/problems/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]. 解题思路:先将区间按照每个start的值来排序,排好序以后判断一个区间的start值是否处在前一个区间

2015.03.30 LeetCode Merge Intervals 解题记录

今天下午做了一道题.leetcode merge intervals 属于比较难的题目. 首先用collections.sort 给list排序,然后用两个while loop来比较两个interval 的start, end . 从而生成新的interal,再插入到新的list 返回结果. 下面给出自己的代码: /* 50 Merge Intervals https://leetcode.com/problems/merge-intervals/ Given a collection of i

LeetCode: Merge Intervals 解题报告

Merge IntervalsGiven 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]. SOLUTION 1: 1. 先使用Comparator 的匿名类对intervels进行排序. 2. 把Intervals遍历一次,依次一个一个merge到第1个interval. 把第1

LeetCode Merge Intervals

原题链接在这里:https://leetcode.com/problems/merge-intervals/ 首先sort list 中的interval. 然后比较 前一个 interval的end是否 >= 后一个interval 的start, 若是,则合并这两个interval, 用来和下一个比较.若不是,则把这段interval 加到res中去. 通过本题见到了如何改写Comparator, 参见了这篇文章:http://www.blogjava.net/yesjoy/articles

[Leetcode] 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]. 题意:给定一系列区间,合并重叠区间 思路:其实,个人觉得,题目的例子有一定误导性,以为区间已经按每个区间的start值排好序了.结果,毫无疑问,悲剧了.若是已经排好序,则,只需将当前区间的end值和下一个的start值比较,

LeetCode() Merge Intervals 还是有问题,留待,脑袋疼。

感觉有一点进步了,但是思路还是不够犀利. /** * 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: vector<Interval> merge(vector<In

【LeetCode】Merge Intervals 题解 利用Comparator进行排序

题目链接Merge Intervals /** * Definition for an interval. * public class Interval { * int start; * int end; * Interval() { start = 0; end = 0; } * Interval(int s, int e) { start = s; end = e; } * } * 题目:LeetCode 第56题 Merge Intervals 区间合并给定一个区间的集合,将相邻区间之间

LeetCode --- 56. Merge Intervals

题目链接: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]. 这道题的要求是将给定的一组间隔中有重叠的进行合并. 将间隔合并,首先要找到相邻的间隔,然后看其是否有重叠,如果有,就进行合并. 因此,首先考虑对数组排序.排序的时候,只需要按