public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); StackOfIntegers stack = new StackOfIntegers(); int m= in.nextInt(); for(int i=0;i<m;i++){ int j = in.nextInt(); if(j==1){ int k=in.nextInt(); stack.push(k); } else if (j==0) { if(stack.empty()) System.out.println("invalid"); else System.out.println(stack.pop()); } } } } class StackOfIntegers{ int[] stack; int size=10,pos; StackOfIntegers(){ stack=new int[size]; pos=0; } void push(int x) { stack[pos++]=x; } boolean empty() { return pos==0; } int pop() { return stack[--pos]; } }优化代码,避免运行超时
时间: 2024-02-14 17:15:41 浏览: 143
可以考虑在StackOfIntegers类中使用动态数组来避免运行超时。动态数组可以在需要时自动扩展其大小,以适应更多的元素。同时,将数组扩展的大小设为原来的两倍,可以在一定程度上减少扩展次数,提高代码的效率。以下是优化后的代码:
```
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
StackOfIntegers stack = new StackOfIntegers();
int m = in.nextInt();
for (int i = 0; i < m; i++) {
int j = in.nextInt();
if (j == 1) {
int k = in.nextInt();
stack.push(k);
} else if (j == 0) {
if (stack.empty())
System.out.println("invalid");
else
System.out.println(stack.pop());
}
}
}
}
class StackOfIntegers {
int[] stack;
int size = 10, pos;
StackOfIntegers() {
stack = new int[size];
pos = 0;
}
void push(int x) {
if (pos == size) {
int[] newStack = new int[size * 2];
System.arraycopy(stack, 0, newStack, 0, size);
stack = newStack;
size *= 2;
}
stack[pos++] = x;
}
boolean empty() {
return pos == 0;
}
int pop() {
return stack[--pos];
}
}
```
修改后的StackOfIntegers类中添加了动态数组的实现,当栈满时,将数组大小扩大为原来的两倍。这样可以保证栈始终有足够的空间来存储元素,避免了运行超时的问题。
阅读全文