LintCode 391: Count Of Airplanes
LintCode 391: Count Of Airplanes
题目描述
给出飞机的起飞和降落时间的列表,用 interval 序列表示. 请计算出天上同时最多有多少架飞机?
样例
对于每架飞机的起降时间列表:[[1,10],[2,3],[5,8],[4,7]], 返回3。
Thu Feb 23 2017
思路
这道题思路很容易想到,即将飞机起飞降落的过程模拟一遍,即可得到最大飞机数。
首先将Interval序列按照起飞时间排序,以及再按照降落时间排序,然后从最早起飞时间到最晚降落时间遍历,降落一架飞机,计数器减一,起飞一家飞机,计数器加一。
时间复杂度是\(O(n+m)\),从复杂度上是最优的了,但是本题还有更好的方法,以后再补吧。
代码
// 数飞机
// 用于排序起飞时间的比较函数
static bool cmp_start(const Interval& x, const Interval& y)
{
return x.start < y.start;
}
// 用于排序降落时间的比较函数
static bool cmp_end(const Interval& x, const Interval& y)
{
return x.end < y.end;
}
// 主执行函数
int countOfAirplanes(vector<Interval> &airplanes)
{
if (airplanes.size() <= 0) return 0;
vector<Interval> airplanes_start(airplanes);
vector<Interval> airplanes_end(airplanes);
sort(airplanes_start.begin(), airplanes_start.end(), cmp_start);
sort(airplanes_end.begin(), airplanes_end.end(), cmp_end);
int max_count = -1, now_count = 0;
int start_index = 0, end_index = 0;
for (int i = airplanes_start.begin()->start; i < (airplanes_end.end() - 1)->end; ++i)
{
if (airplanes_end[end_index].end == i)
{
--now_count;
++end_index;
}
else if (airplanes_start[start_index].start == i)
{
++now_count;
++start_index;
}
else continue;
if (now_count > max_count) max_count = now_count;
// 由于在一个时间点可能同时有降落和起飞,所以需要回退一次
--i;
}
return max_count;
}
LintCode 391: Count Of Airplanes的更多相关文章
- lintcode :Count and Say 报数
题目: 报数 报数指的是,按照其中的整数的顺序进行报数,然后得到下一个数.如下所示: 1, 11, 21, 1211, 111221, ... 1 读作 "one 1" -> ...
- lintcode :Count 1 in Binary 二进制中有多少个1
题目: 二进制中有多少个1 49% 通过 计算在一个 32 位的整数的二进制表式中有多少个 1. 样例 给定 32 (100000),返回 1 给定 5 (101),返回 2 给定 1023 (111 ...
- LintCode "Triangle Count"
Should be "Medium" or even "Easy".. Just with a little Greedy. class Solution { ...
- LintCode: Number of Airplanes in the Sky
C++ (1)把interval数组中的所有start和所有end放在同一个数组中,然后进行排序,遇到start就起飞一架飞机,遇到一架end就降落一架飞机,所以start有个+1属性,end有个-1 ...
- [LintCode]——目录
Yet Another Source Code for LintCode Current Status : 232AC / 289ALL in Language C++, Up to date (20 ...
- lintcode算法周竞赛
------------------------------------------------------------第七周:Follow up question 1,寻找峰值 寻找峰值 描述 笔记 ...
- lintcode:数飞机
数飞机 给出飞机的起飞和降落时间的列表,用 interval 序列表示. 请计算出天上同时最多有多少架飞机? 如果多架飞机降落和起飞在同一时刻,我们认为降落有优先权. 样例 对于每架飞机的起降时间列表 ...
- Number of Airplanes in the Sky
Given an interval list which are flying and landing time of the flight. How many airplanes are on th ...
- Sweep Line
391. Number of Airplanes in the Sky https://www.lintcode.com/problem/number-of-airplanes-in-the-sky/ ...
随机推荐
- prototype.js中Function.prototype.bind方法浅解
prototype.js中的Function.prototype.bind方法: Function.prototype.bind = function() { var __method = this; ...
- jquery validate 一个注册表单的应用
先看页面 前端表单代码 register.html <form class="mui-input-group" id="regForm"> < ...
- Hibernate学习--hibernate延迟加载原理-动态代理(阿里电面)
在正式说hibernate延迟加载时,先说说一个比较奇怪的现象吧:hibernate中,在many-to-one时,如果我们设置了延迟加载,会发现我们在eclipse的调试框中查看one对应对象时,它 ...
- apache server-status配置
引言 自己配置LAMP服务器时(xwamp),获取状态信息出现错误: You don't have permission to access /server-status on this server ...
- 第90天:HTML5中文件API和拖放操作
一.文件API File API:提供客户端本地操作文件的可能 multiple是让文件域可以多选 <!DOCTYPE html> <html lang="en" ...
- Android 水波纹点击效果(Ripple Effect)
上周Android发布了Android M的Preview版本.但想必Android5.0很多炫酷效果,多数开发者还没有使用过,那更不要说广大用户了. 本文介绍的是Android5.0中其中一个炫酷的 ...
- NetBeans IDE驱动报错The path to the driver executable must be set by the web driver.chrome.driver.system property......
问题:defaulstUserDataPath=C:\\Users\\user1\\AppData\\Local\\Google\\Chrome\\User Data\\Defaul 编译失败 解决 ...
- 【Java】JAVA开发人员常见环境工具安装
1.安装配置JDK1.7:jdk-7u45-windows-x64.exe,环境变量配置:JAVA_HOME---[F:\1024\jdk1.7],CLASSPATH---[.;%JAVA_HOME% ...
- POJ.2528 Mayor's posters (线段树 区间更新 区间查询 离散化)
POJ.2528 Mayor's posters (线段树 区间更新 区间查询 离散化) 题意分析 贴海报,新的海报能覆盖在旧的海报上面,最后贴完了,求问能看见几张海报. 最多有10000张海报,海报 ...
- 【bzoj4811】由乃的OJ
Portal --> bzoj4811 Solution 这题可以用树剖+线段树做也可以用LCT做,不过大体思路是一样的 (接下来先讲的是树剖+线段树的做法,再提LCT的做法) 首先位 ...