问题:假设有很多访客要来进行访问,他们都有自己的到达时间和离开时间。请找出最多的时候有多少访客同时在该地访问?
//最大访客问题 每个访客的来访时间和离开时间固定,求哪个时刻访客最多
//思路:两个数组,一个存来访时间,一个存离开时间,每个时刻用来访人数减去离开人数就是该时刻访客人数
void findmaxvisitor(vector<int> &veComm, vector<int> &veLeve)
{
if (veComm.size() < 1 || veLeve.size() < 1 || veComm.size() != veLeve.size())
return;
int num = 0, max = 0;
sort(veComm.begin(), veComm.end());
sort(veLeve.begin(), veLeve.end());
int i, j;
for (i = 0, j = 0; i < veComm.size() && j < veLeve.size(); )
{
if (veComm[i] < 0 || veComm[i] > 23 || veLeve[j] < 0 || veLeve[j] > 23)
{
cout << "error: argument error" << endl;
return;
}
if (veComm[i] < veLeve[j]) //来客
{
num++;
i++;
}
else if (veComm[i] == veLeve[j]) //有来有走
{
i++;
j++;
}
else //送客
{
num--;
j++;
}
if (num > max)
max = num;
}
cout << max << endl;
}
int main()
{
vector<int> veCome, veLeve;
int iCome, iLeve;
while (true)
{
cin >> iCome;
if (iCome == -1)
break;
cin >> iLeve;
if (iLeve == -1)
break;
veCome.push_back(iCome);
veLeve.push_back(iLeve);
}
findmaxvisitor(veCome, veLeve);
return 0;
}