最大访客问题

问题:假设有很多访客要来进行访问,他们都有自己的到达时间和离开时间。请找出最多的时候有多少访客同时在该地访问?

//最大访客问题  每个访客的来访时间和离开时间固定,求哪个时刻访客最多
//思路:两个数组,一个存来访时间,一个存离开时间,每个时刻用来访人数减去离开人数就是该时刻访客人数
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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值