我遇到了一个问题。我需要使用push和pop操作来实现堆栈。
输入
输入文件的第一行包含一个整数N (1 <= N <= 10^6)
- 测试用例的数量。
接下来N行说明操作。 +
意味着推动。 -
表示流行。我需要打印弹出元素。
Example
Input Output
6
+ 1 10
+ 10 1234
-
+ 2
+ 1234
-
我写了以下代码
public class Main {
public static void main(String[] args) throws FileNotFoundException {
Scanner sc = new Scanner(new File("stack.in"));
PrintWriter pw = new PrintWriter(new File("stack.out"));
int n=sc.nextInt();
int[] stack = new int[n]; int i=0;
while(n-->0) {
String s = sc.next();
if(s.equals("+")) {
stack[i++]=sc.nextInt();
} else {
pw.println(stack[--i]);
}
}
sc.close(); pw.close();
}
}
此程序为我提供超出时间限制。 请建议我一个有效的算法来解决这个问题。
对于每个输入文件:
Time limit: 2 seconds
Memory limit: 256 megabytes
答案 0 :(得分:2)
经验法则:如果您正在解决竞争性编程风格问题并且输入很大(例如,<input type="hidden" th:field="*{anonymization.id}"/>
数字或更多),则10^5
太慢。
您可以在Scanner
之上使用StringTokenizer
来加快输入速度。
它看起来像这样:
BufferedReader