• [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 }
    View Code
  • 相关阅读:
    【构建工具】《Maven实战》读书笔记
    【网络安全】Dos攻击科普文
    谈谈集合.CopyOnWriteArrayList
    谈谈集合.List
    小程序开发--移动端分辨率与rpx
    跟面向对象卯上了,看看ES6的“类”
    捋一捋js面向对象的继承问题
    Canvas的drawImage方法使用
    浏览器内核趣对话
    “茴”字有四种写法,this也是一样
  • 原文地址:https://www.cnblogs.com/Azhu/p/4156711.html
Copyright © 2020-2023  润新知