zoukankan      html  css  js  c++  java
  • (合并 重叠数组)练习容器的用法

    • 题目
      给定间隔的集合,合并所有重叠间隔。
      
      例如,
      给定[1,3],[2,6],[8,10],[15,18]
      return [1,6],[8,10],[15,18]。
    • 题目分析:合并重叠的数组,这里首先是定义排序规则,给所有数组进行排序,然后合并重叠的就行了。
    • 代码
      /**
       * Definition for an interval.
       * struct Interval {
       *     int start;
       *     int end;
       *     Interval() : start(0), end(0) {}
       *     Interval(int s, int e) : start(s), end(e) {}
       * };
       */
          bool comp(const Interval &a, const Interval &b){
              if (a.start == b.start)//如果第一个元素相同,就按照最后一个元素比较;如果不同就按第一个元素来排序
                  return a.end < b.end;
              else
                  return a.start < b.start;
          }
      class Solution {
      public:
          vector<Interval> merge(vector<Interval> &intervals) {
              sort(intervals.begin(), intervals.end(), comp);//定义排序规则,按照升序排序
              vector<Interval> res;
              int len = intervals.size();
              for (int i=0; i<len; i++){
                  if (res.empty())
                      res.push_back(intervals[i]);
                  else{
                      Interval last = res.back();//找到res里面的最后一个元素与当前interval元素进行比较
                      if (last.end >= intervals[i].start){//当前一个元素end大于当前元素start时,在比较end与end之间,进行合并
                          res.pop_back();
                          last.end = max(last.end, intervals[i].end);
                          res.push_back(last);
                      }else//如果不能合并,直接入容器
                          res.push_back(intervals[i]);
                  }
              }
              return res;
          }
      
      };
  • 相关阅读:
    有理有据啊
    男人这辈子挺难的
    最 近 最 NB 的 人
    李安抽了中国电影人一记响亮的耳光
    听LeeHom的几首歌
    【Vegas原创】RMAN06059解决
    【Vegas原创】对应父节点的树状返回查询
    【OU】数据库备份与恢复测试
    【Vegas原创】用x$kvit视图查内部参数设置
    【Vegas原创】DG Build(Linux版)
  • 原文地址:https://www.cnblogs.com/Kobe10/p/6367292.html
Copyright © 2011-2022 走看看