zoukankan      html  css  js  c++  java
  • LintCode: Number of Airplanes in the Sky

    C++

    (1)把interval数组中的所有start和所有end放在同一个数组中,然后进行排序,遇到start就起飞一架飞机,遇到一架end就降落一架飞机,所以start有个+1属性,end有个-1属性,这样就可以根据排序之后的数组得知任意时间飞行中的飞机的数量了

    (2)pair,make_pair,val.first,val.second

    (3)sort(), max()

    (4)for (auto &i : Object) {}

    (5)push_back()

     1 /**
     2  * Definition of Interval:
     3  * classs Interval {
     4  *     int start, end;
     5  *     Interval(int start, int end) {
     6  *         this->start = start;
     7  *         this->end = end;
     8  *     }
     9  */
    10 class Solution {
    11 public:
    12     /**
    13      * @param intervals: An interval array
    14      * @return: Count of airplanes are in the sky.
    15      */
    16     int countOfAirplanes(vector<Interval> &airplanes) {
    17         // write your code here
    18         vector<pair<int, int> > v;
    19         for (auto &i : airplanes) {
    20             v.push_back(make_pair(i.start, 1));
    21             v.push_back(make_pair(i.end, -1));
    22         }
    23         int cnt = 0, res = 0;
    24         sort(v.begin(), v.end());
    25         for (auto &i : v) {
    26             cnt += i.second;
    27             res = max(cnt, res);
    28         }
    29         return res;
    30     }
    31 };

    另一个解法(无需排序):

    刚开始阅读题目的时候,我以为起飞时间和降落时间都是0~24之内,所以就用了两个长度30的辅助数组,这种方法可以避免排序。

    但是,无法AC,因为interval中的元素,最大的有几十万,如果辅助数组也这么大的话,那很容易超时。

     1 /**
     2  * Definition of Interval:
     3  * classs Interval {
     4  *     int start, end;
     5  *     Interval(int start, int end) {
     6  *         this->start = start;
     7  *         this->end = end;
     8  *     }
     9  */
    10 class Solution {
    11 public:
    12     /**
    13      * @param intervals: An interval array
    14      * @return: Count of airplanes are in the sky.
    15      */
    16     int countOfAirplanes(vector<Interval> &airplanes) {
    17         // write your code here
    18         int fly[30] = {0};
    19         int land[30] = {0};
    20         int len = airplanes.size();
    21         for (int i = 0; i < len; i++ ) {
    22             fly[airplanes[i].start] ++;
    23             land[airplanes[i].end] --;
    24         }
    25         int max = 0, cur = 0;
    26         for (int i = 0; i < 30; i++ ) {
    27             cur = cur + fly[i] + land[i];
    28             if (cur > max) {
    29                 max = cur;
    30             }
    31         }
    32         return max;
    33     }
    34 };
  • 相关阅读:
    requests库之处理响应
    requests库之自定义request
    requests库之请求异常处理
    requests库之带参请求
    BFS广度优先
    分治模板
    递归模板
    数据机构与算法学习(三)- 数组
    消息队列学习笔记
    数据结构与算法学习(二)
  • 原文地址:https://www.cnblogs.com/CheeseZH/p/5109478.html
Copyright © 2011-2022 走看看