1.第一题
1.1题目
描述:
Web系统通常会频繁地访问数据库,如果每次访问都创建新连接,性能会很差。为了提高性能,架构师决定复用已经创建的连接。当收到请求,并且连接池中没有剩余可用的连接时,系统会创建一个新连接,当请求处理完成时该连接会被放入连接池中,供后续请求使用
现在提供你处理请求的日志,请你分析一下连接池最多需要创建多少个连接。
输入描述:
输入包含多组数据,每组数据第一行包含一个正整数n(1≤n≤1000),表示请求的数量。
紧接着n行,每行包含一个请求编号id(A、B、C……、Z)和操作(connect或disconnect)
输出描述:
对应每一组数据,输出连接池最多需要创建多少个连接
1.2思路
- 定义一个set存放id
- 如果是连接就将对应的id放到set中
- 如果不是连接就将对应的id从set中移除
- 统计set的最大的size
1.3解题
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 count = 0;
// 定义一个set存放id(HashSet是无序的,treeSet是有序的)
Set<String> set = new HashSet<>();
for(int i = 0;i < n;i++){
String id = sc.next();
String op = sc.next();
// 如果是连接就将对应的id放到set中
if(op.equals("connect")){
set.add(id);
}else{
// 如果不是连接就将对应的id从set中移除
set.remove(id);
}
// 统计set的最大的size
count = Math.max(count,set.size());
}
System.out.println(count);
}
}
}
2.第二题
2.1题目
描述:
工作中,每当要部署一台新机器的时候,就意味着有一堆目录需要创建。例如要创建目录“/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”命令
每组数据之后输出一个空行作为分隔
2.2思路
- 对读取的目录进行排序
- 标记出相同的目录和子目录(注意:Boolean数组的默认初始化的值是false)
- 对除了标记的目录进行打印
2.3解题
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();
String[] path = new String[n];
for(int i = 0;i < n;i++){
path[i] = sc.next();
}
Arrays.sort(path);
// 标记相同或子目录
boolean[] flg = new boolean[n];
for(int i = 0;i < n - 1;i++){
// 相同目录
if(path[i].equals(path[i+1])){
flg[i] = true;
}else if(path[i+1].contains(path[i])&&path[i+1].charAt(path[i].length()) == '/'){
// 子目录
flg[i] = true;
}
}
for(int i = 0;i < n;i++){
if(!flg[i]){
System.out.println("mkdir -p " + path[i]);
}
}
System.out.println();
}
}
}