一道阿里面试题(练习)

题目说明:
小明中午路过一家公共停车场,出于程序员的职业习惯,他很想知道这个停车场上午的最大化利用率有多少。
经与门卫大叔沟通,他获得了该停车场上午车辆入场时间与出场时间的记录表(数据格式参考样例输入),
你能通过拿到的数据写一个函数快速的帮小明算出这家停车场,上午最多的时候同时停放了多少辆车吗?
要求时间复杂度不高于: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] ;
}

 






posted @ 2018-08-02 10:02  一介草民李八千  阅读(289)  评论(0)    收藏  举报