私は問題に遭遇しました。 pushとpop操作でスタックを実装する必要があります。Stackを実装する効率的なアルゴリズムは何ですか?
入力
入力Fiのルの第1のラインは、単一の整数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
スタックはokです。問題はIOのどこかにあります。スキャナーが遅いのでしょうか?最初にintをそこに戻す代わりに文字列を格納することができます。 –
C++ STLに似たJavaコレクションを試してください。ちょっとgoogleにしてください – NeoR
@Antonin、int []の代わりにString []を使用することをお勧めしますか?私もそのようにしてみました。 –