zoukankan      html  css  js  c++  java
  • 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].

    思路:

    先对数据进行排序,然后逐个插入。注意在使用sort的时候,最开始出现<unresolved overloaded function type>错误,后来把myCmp改成static的以后就解决了。

    代码:

     1     int max(int a, int b){
     2         if(a > b)
     3             return a;
     4         return b;
     5     }
     6     static bool myCmp(const Interval &a, const Interval &b){
     7         if(a.start == b.start)
     8             return a.end < b.end;
     9         return a.start < b.start;
    10     }
    11     vector<Interval> merge(vector<Interval> &intervals) {
    12         int n = intervals.size();
    13         if(n <= 1)
    14             return intervals;
    15         sort(intervals.begin(), intervals.end(), myCmp);
    16         vector<Interval> result;
    17         int start = intervals[0].start, end = intervals[0].end;
    18         for(int i = 1; i < n; i++){
    19             if(intervals[i].start > end){
    20                 result.push_back(Interval(start, end));
    21                 start = intervals[i].start;
    22                 end = intervals[i].end;
    23             }
    24             else{
    25                 end = max(end, intervals[i].end);
    26             }
    27         }
    28         result.push_back(Interval(start, end));
    29         return result;
    30     }

     第二遍:

     1     static bool myCmp(const Interval &a, const Interval &b){
     2         if(a.start == b.start)
     3             return a.end < b.end;
     4         return a.start < b.start;
     5     }
     6     vector<Interval> merge(vector<Interval> &intervals) {
     7         vector<Interval> result;
     8         if(!intervals.empty()){
     9             sort(intervals.begin(), intervals.end(), myCmp);
    10             int start = intervals[0].start, end = intervals[0].end;
    11             for(int i = 1; i < intervals.size(); i++){
    12                 if(intervals[i].start <= end)
    13                     end = end > intervals[i].end ? end : intervals[i].end;
    14                 else{
    15                     result.push_back(Interval(start, end));
    16                     start = intervals[i].start;
    17                     end = intervals[i].end;
    18                 }
    19             }
    20             result.push_back(Interval(start, end));
    21         }
    22         return result;
    23     }
  • 相关阅读:
    Windows 7任务栏图标特别说明
    Linux下send函数 Broken pipe错误的解决方法
    C++实现一个简单的异常日志记录类
    C++写日志操作
    VC中设置打开文件的权限为管理员权限
    MFC 注册热键
    监控Tomcat状态及配置AIO(APR)模式
    Tomcat管理功能使用及WEB站点部署
    Tomcat多实例配置
    基于端口主机的虚拟主机
  • 原文地址:https://www.cnblogs.com/waruzhi/p/3454262.html
Copyright © 2011-2022 走看看