一道阿里面试题(练习)
题目说明:
小明中午路过一家公共停车场,出于程序员的职业习惯,他很想知道这个停车场上午的最大化利用率有多少。
经与门卫大叔沟通,他获得了该停车场上午车辆入场时间与出场时间的记录表(数据格式参考样例输入),
你能通过拿到的数据写一个函数快速的帮小明算出这家停车场,上午最多的时候同时停放了多少辆车吗?
要求时间复杂度不高于:O(n)*lgN
注意事项:
1、为方便起见,简化计算,驶入时间和开出时间以整点记录,如9点,10点。
2、如停车记录中入场时间晚于出场时间,该停车记录视为无效,如7,3
3、假定如果有多辆车同时出入场,出场车辆优先。
样例输入:
8,9;4,6;3,7;6,8 (车辆以分号分隔,车辆入场和出场时间以逗号分隔)
样例输出:
2
C++简单实现:
#include <stdio.h> #include <iostream> #include <algorithm> using namespace std; /** * 总的思路是:建立一个长度为12的数组,每个元素存储当前元素index->index+1小时段的停车数量。然后通过遍历输入修改数组中的每个值 * 如下为简单实现,未考虑健壮 */ // 存储从0-1,1-2,....等的车的数量 const int DURAL = 12; bool compare(int x,int y) { return x > y; } int duralCount[DURAL]; int main() { string inputStr; getline(cin,inputStr); if(inputStr == "") { return 1; } string::iterator it = inputStr.begin(); string::iterator endIt = inputStr.end(); int currentStart = 0; int currentEnd = 0; for (; it!= endIt ; ++it) { if(*it == ',') { currentStart = (int)(*(--it) - 48); it++; currentEnd = (int)(*(++it)-48); it--; for (int i = currentStart; i < currentEnd; ++i) { duralCount[i]++; } } } sort(duralCount,duralCount+DURAL,compare); cout << duralCount[0] ; }
专注搬砖,擅长搬砖砸自己的脚~~~
Email:
ltwbuaa@163.com

浙公网安备 33010602011771号