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     }
  • 相关阅读:
    Part 7 Joins in sql server
    Part 9 Union and union all in sql server
    Part 4 using entity framework
    Part 3 ViewData and ViewBag in mvc
    Part 2 How are the URL's mapped to Controller Action Methods?
    Part 1 some difference from asp.net to asp.net mvc4
    Part 18 Indexes in sql server
    c/c++保存日志程序模板
    技术只是工具,你不能用它来代替生活
    网络篇:linux下select、poll、epoll之间的区别总结
  • 原文地址:https://www.cnblogs.com/waruzhi/p/3454262.html
Copyright © 2011-2022 走看看