实现Stack的有效算法是什么?

时间:2016-10-29 17:27:21

标签: algorithm performance stack

我遇到了一个问题。我需要使用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

1 个答案:

答案 0 :(得分:2)

经验法则:如果您正在解决竞争性编程风格问题并且输入很大(例如,<input type="hidden" th:field="*{anonymization.id}"/> 数字或更多),则10^5太慢。

您可以在Scanner之上使用StringTokenizer来加快输入速度。

它看起来像这样:

BufferedReader