餐厅

题目描述

阿邱最近开了家餐厅。阿邱想了解某一时段至少有多少不同人出入餐厅。阿邱就雇佣了一个人,呆在餐厅门口,有人进入餐厅,他就在纸上记下+,有人出餐厅,他就在纸上记下-。
假设同一时间没有两个人同时进入或出餐厅;也假设最初的时候餐厅中有足够多的人。问,这段时间里,至少有多少人出入餐厅。(不同人出入的顺序是随意的,一个人可以反复出入。)

输入

2
+-+-+
---

输出

1
3

思路

第一反应是用栈,记录最大长度,发现过不了。后来又想到找最长的连加或者连减串,发现还是过不了,后经同学提醒了一组刁钻的用例

---+++-+++

输出为5
我的代码好像过不了这个用例,于是只好换了一种思路。
要寻找最少人数,本质上是进与出左右拉扯,两边端点的距离即是最少人数。

代码

#include<stdio.h>
#include<string.h>
int main() {
	int m, i, add, sub, num;
	char ch;
	scanf("%d", &m);
	getchar();
	for (i = 0;i < m;i++) {
		add = sub = 0;
		num = 0;
		while ((ch = getchar()) != '\n') {
			if (ch == '+') {
				num++;
				if (num > add)
					add = num;
			}
			else {
				num--;
				if (num < sub)
					sub = num;
			}
		}
		printf("%d\n", add - sub);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值