洛谷P11043
洛谷 P11043
目录
- 题目描述
- 示例
- 思路分析
- 代码段
- 代码逐行讲解
- 复杂度分析
- 总结的知识点
- 整合
- 总结
题目描述
(根据题目内容补充)
示例
示例 1
输入:
(输入示例)
输出:
(输出示例)
解释:
(解释示例)
思路分析
问题核心
(简要描述问题的核心要求)
思路拆解
- 步骤 1:
- (详细描述第一步的思路)
- 步骤 2:
- (详细描述第二步的思路)
- 步骤 3:
- (详细描述第三步的思路)
代码段
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] dp = new int[10];
int x = 0;
while (sc.hasNext()) {
String que = sc.next();
if (que.equals("add")) {
x = sc.nextInt();
dp[0]++;
} else if (que.equals("sync")) {
x = sc.nextInt();
dp[x]++;
} else {
int min = Integer.MAX_VALUE;
for (int i = 0; i < n; i++) {
min = Math.min(min, dp[i]);
}
System.out.println(min);
}
}
}
}
代码逐行讲解
-
输入处理:
Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] dp = new int[10]; int x = 0;
- 使用
Scanner
读取输入的整数n
,并初始化一个大小为 10 的数组dp
和一个变量x
。
- 使用
-
循环处理输入:
while (sc.hasNext()) { String que = sc.next(); if (que.equals("add")) { x = sc.nextInt(); dp[0]++; } else if (que.equals("sync")) { x = sc.nextInt(); dp[x]++; } else { int min = Integer.MAX_VALUE; for (int i = 0; i < n; i++) { min = Math.min(min, dp[i]); } System.out.println(min); } }
- 使用
while
循环不断读取输入,直到没有更多输入为止。 - 根据输入的指令
que
执行不同的操作:- 如果指令是
"add"
,则读取一个整数x
,并将dp[0]
的值加 1。 - 如果指令是
"sync"
,则读取一个整数x
,并将dp[x]
的值加 1。 - 如果指令是其他值,则计算数组
dp
中前n
个元素的最小值,并输出该最小值。
- 如果指令是
- 使用
复杂度分析
时间复杂度
- 每次循环中,根据指令的不同,时间复杂度也有所不同:
"add"
和"sync"
操作的时间复杂度为 O(1)。- 计算最小值的操作需要遍历数组
dp
的前n
个元素,时间复杂度为 O(n)。
- 假设总共有
m
条指令,其中k
条是计算最小值的指令,则总时间复杂度为 O(m + k * n)。
空间复杂度
- 使用了一个大小为 10 的数组
dp
,空间复杂度为 O(1)。
总结的知识点
-
输入处理:
- 使用
Scanner
读取输入,并处理不同类型的指令。
- 使用
-
数组操作:
- 使用数组
dp
来记录不同位置的值,并根据指令进行更新。
- 使用数组
-
条件判断:
- 使用
if-else
语句根据指令执行不同的操作。
- 使用
-
循环与遍历:
- 使用
while
循环处理多条指令,并使用for
循环遍历数组计算最小值。
- 使用
整合
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] dp = new int[10];
int x = 0;
while (sc.hasNext()) {
String que = sc.next();
if (que.equals("add")) {
x = sc.nextInt();
dp[0]++;
} else if (que.equals("sync")) {
x = sc.nextInt();
dp[x]++;
} else {
int min = Integer.MAX_VALUE;
for (int i = 0; i < n; i++) {
min = Math.min(min, dp[i]);
}
System.out.println(min);
}
}
}
}
总结
掌握如何处理多组输入指令,并根据指令执行不同的操作。