首页 > 试题广场 >

数据库连接池

[编程题]数据库连接池
  • 热度指数:1801 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
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
import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int n = sc.nextInt();
            Set<String> s = new HashSet<>();
            int max_count = 0;
            while(n != 0){
                String id = sc.next();
                String op = sc.next();
                if(op.equals("connect")){
                    s.add(id);
                }else{
                    s.remove(id);
                }
                max_count = Math.max(max_count,s.size());
                n--;
            }
            System.out.println(max_count);
        }
    }
}

发表于 2023-03-07 21:00:51 回复(0)
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNextLine()) {
            String  str=scanner.nextLine();
            int n=Integer.parseInt(str);
            scanner.next();
            String[] elem = new String[n];
            for (int i = 0; i < n; i++) {
                elem[i] = scanner.nextLine();
            }
            Queue<String> queue = new LinkedList<>();
            int size = 0;
            for (int i = 0; i < elem.length; i++) {
                String[] ret = elem[i].split(" ");
                if (ret[1].equals("connect")) {
                    queue.add(ret[0]);
                    size = Math.max(size, queue.size());
                } else
                    queue.poll();
            }
            System.out.println(size);
        }
    }
}

发表于 2022-09-20 11:48:02 回复(0)
import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        while(scanner.hasNextLine()){
            String strNum = scanner.nextLine();
            int num = Integer.parseInt(strNum);
            int count = 0;
            int maxCount = 0;
            while(num-- != 0){
                String str = scanner.nextLine();
                if(!str.contains("disconnect")){
                    count++;
                }else{//那就是connect
                    maxCount = count > maxCount ? count : maxCount;
                    count--;
                }
            }
                System.out.println(maxCount);
            }
    }
}

只要出现discnnonet那就将当前count次数和maxCount次数进行比较,maxCount存储最大连接池个数
编辑于 2022-06-14 18:21:32 回复(0)
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int n = sc.nextInt();
            int size = 0;
            int max = 0;
            for(int i = 0;i < n;i++){
                String id = sc.next();
                String s = sc.next();
                
                if(s.equals("connect")){
                    size++;
                    max = Math.max(max,size);
                }else if(s.equals("disconnect")){
                    size--;
                }
            }
            System.out.println(max);
        }
    }
}

编辑于 2022-05-25 22:02:19 回复(0)
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int n = Integer.parseInt(sc.nextLine());
            String[] str = new String[n];
            Stack<String> stack = new Stack<>();
            int max = 0;
            for(int i = 0; i < n; i++){
                str[i] = sc.nextLine();
                if(!str[i].contains("disconnect")){
                    stack.push(str[i]);
                    max = Math.max(max, stack.size());
                }
                else{
                    stack.pop();
                }
            }
            System.out.println(max);
        }
    }
}

发表于 2021-07-26 12:51:47 回复(0)