【编程题 】数据库连接池(详细注释 易懂)

题目描述:

题目链接:数据库连接池__牛客网
Web系统通常会频繁地访问数据库,如果每次访问都创建新连接,性能会很差。为了提高性能,架构师决定复用已经创建的连接。当收到请求,并且连接池中没有剩余可用的连接时,系统会创建一个新连接,当请求处理完成时该连接会被放入连接池中,供后续请求使用。

  现在提供你处理请求的日志,请你分析一下连接池最多需要创建多少个连接。

输入描述:

输入包含多组数据,每组数据第一行包含一个正整数n(1≤n≤1000),表示请求的数量。

紧接着n行,每行包含一个请求编号id(A、B、C……、Z)和操作(connect或disconnect)。

输出描述:

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

示例1

输入

6
A connect
A disconnect
B connect
C connect
B disconnect
C disconnect

输出

2

题目理解: 

   每次访问数据库就要建立一个连接,请问过程中最多建立了多少个连接?题目不难,思路也容易形成,但有几个小细节需要注意,不然也会卡一会儿。 一个是输入的 n 个 id 和 操作符,应该用什么存储,又如何拿出? 另一个是 参照id 的情况下,如何得到连接的最大值?

思路讲解: 

      本题解题,采用了两个巧思路,一个是 再循环里面接收输入的 id 和 操作符,这样输入一个处理一个,就不用数据结构去存储了。还有个巧思路是 同一个id 在没有断开的情况下,下一次出现的一定是断开,它不会重复连接(有了这个前提,就不用区分id了),我们就可以无脑加减一个变量, 遇见 connect 就是 加 1 ,遇见disconnect 就是 减 1 ,用另外一个变量记录过程中的最大值就好了。 

       提示一下,另一种思路是 ,用 HashSet 结构存储这个 id 值, 在过程中,遇见 connect 就是 加 1 ,遇见disconnect 就是 减 1,用另外一个变量记录过程中,set的最大 size 就好了。

代码注释:

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        while(scan.hasNextInt()){
            int count =0;
            int n = scan.nextInt();
           int max =0;
            for(int i =0;i< n;i++){
                 String id = scan.next();
                 String op = scan.next();
                if(op.equals("connect")){
                    count++;
                }else{
                    count--;
                }
                max = Math.max(max,count);
            }
            System.out.println(max);
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值