目录
一、数据库连接池
(1)原题再现
(2)问题分析
(3)完整代码
二、mkdir
(1)原题再现
(2)问题分析
(3)完整代码
一、数据库连接池
(1)原题再现
数据库连接池__牛客网
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
(2)问题分析
贪心算法,走一步看一步,如果是connect就+1,如果不是就-1,每一步都判断最大的connect数是多少。
(3)完整代码
import java.util.*; /* * 数据库连接池 */ public class Main{ public static void main(String[] args) { Scanner sc=new Scanner(System.in); while(sc.hasNext()) { int num=sc.nextInt(); String []id=new String[num]; String []op=new String[num]; for(int i=0;i<num;i++) { id[i]=sc.next(); op[i]=sc.next(); } int max=Integer.MIN_VALUE; int count=0; for(int i=0;i<num;i++) { if("connect".equals(op[i])) { count++; }else { count--; } max=Math.max(max,count); } System.out.println(max); } sc.close(); } }
二、mkdir
(1)原题再现
mkdir__牛客网
工作中,每当要部署一台新机器的时候,就意味着有一堆目录需要创建。例如要创建目录“/usr/local/bin”,就需要此次创建“/usr”、“/usr/local”以及“/usr/local/bin”。好在,Linux下mkdir提供了强大的“-p”选项,只要一条命令“mkdir -p /usr/local/bin”就能自动创建需要的上级目录。
现在给你一些需要创建的文件夹目录,请你帮忙生成相应的“mkdir -p”命令。输入描述:
输入包含多组数据。 每组数据第一行为一个正整数n(1≤n≤1024)。 紧接着n行,每行包含一个待创建的目录名,目录名仅由数字和字母组成,长度不超过200个字符。
输出描述:
对应每一组数据,输出相应的、按照字典顺序排序的“mkdir -p”命令。 每组数据之后输出一个空行作为分隔。
示例1
输入
3
/a
/a/b
/a/b/c
3
/usr/local/bin
/usr/bin
/usr/local/share/bin
输出
mkdir -p /a/b/c
mkdir -p /usr/bin
mkdir -p /usr/local/bin
mkdir -p /usr/local/share/bin
(2)问题分析
用Arrays.sort()方法可以直接把字符串按字典排序,一开始我的想法就是看前面的字符串在后面的能不能找到,能找到就把它设置一个特定的字符串。好像牛客给定的测试样例有点问题。
(3)完整代码
import java.util.Arrays; import java.util.Scanner; /* * mkdir */ public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); while(sc.hasNext()) { int num=sc.nextInt(); String []dir=new String[num]; for(int i=0;i<num;i++) { dir[i]=sc.next(); } Arrays.sort(dir); // for(int i=0;i<num;i++) { // for(int j=1+i;j<num;j++) { // if(dir[j].contains(dir[i])) { // dir[i]="not"; // } // } // } for(int i=1;i<num;i++) { if(dir[i].contains(dir[i-1]) && dir[i].charAt(dir[i-1].length()) == '/'){ dir[i-1]="not";//这样牛客才能过,但是牛客的测试样例有问题 } } for(int i=0;i<num;i++) { if("not".equals(dir[i])) { continue; } System.out.println("mkdir -p "+dir[i]); } System.out.println(); } } }