【牛客网】数据库连接池

题目描述

Web系统通常会频繁地访问数据库,如果每次访问都创建新连接,性能会很差。为了提高性能,架构师决定复用已经创建的连接。当收到请求,并且连接池中没有剩余可用的连接时,系统会创建一个新连接,当请求处理完成时该连接会被放入连接池中,供后续请求使用。
现在提供你处理请求的日志,请你分析一下连接池最多需要创建多少个连接。

输入描述:
输入包含多组数据,每组数据第一行包含一个正整数n(1≤n≤1000),表示请求的数量。
紧接着n行,每行包含一个请求编号id(A、B、C……、Z)和操作结果(connect或disconnect)。

输出描述:
对应每一组数据,输出连接池最多需要创建多少个连接。

示例

输入
6
A connect
A disconnect
B connect
C connect
B disconnect
C disconnect
输出
2

解题思路
  1. 将输入的Id 和 op 依次存在数组v中,然后判断数组中的op,因为是依次存入的,所以op一定在数组的奇数位上,若op 是"connect" 则将op 前面的id 放入队列q中,否则先记录q 的长度,再将op前的id出队列。取得最长的长度即可。下面是实现的部分函数:
int Connect(vector<string> v)
{
	int c = 0;
	queue<string> q;
	for (int i = 1; i<v.size(); i += 2)
	{
		if (v[i] == "connect")
			q.push(v[i - 1]);
		else{
			c = q.size()>c ? q.size() : c;
			q.pop();
		}
	}
	return c;
}
  1. 直接判断输入时的第二个字符串,若第二个字符串是"connect" 则将输入的第一个字符串入队,否则就记录当前长度再出队,最后输出最长长度即可。这里比上面用vector简单一些,代码在下面:
完整代码
#include <iostream>
#include <string>
#include <queue>

using namespace std;

int main()
{
	int n;
	while (cin >> n)
	{
		int con = 0;
		queue<char> q;
		for (int i = 0; i<n; i++)
		{
			char ID;
			cin >> ID;
			string OP;
			cin >> OP;
			if (OP == "connect")
				q.push(ID);
			else
			{
				con = q.size()>con ? q.size() : con;
				q.pop();
			}
		}
		cout << con << endl;
	}
	return 0;
}
运行结果及讲解

在这里插入图片描述

原题链接:

https://www.nowcoder.com/questionTerminal/05f97d9b29944c018578d98d7f0ce56e

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值