基础知识,数据结构挑战,堆栈中的最大数量

时间:2018-10-15 18:15:44

标签: java data-structures

伙计们,我遇到了一些数据结构方面的挑战,我真的不知道该如何更好地解决问题。

我有一个正确的解决方案,但时间超出了一些限制,代码应遵循N条指令:

  • 我输入1时将X数字添加到堆栈中
  • 使用2删除堆栈顶部
  • 并使用3打印出堆栈中的最大数量

that way

它应该用数组,数组列表,堆栈,队列或树来解决。那就是我所做的,但是超过了6.51 s:

import java.util.*;

class Main {

public static void maxStack(int a, int val, Stack stack) {

    switch (a) {
        case 1:
            stack.add(val);
            break;
        case 2:
            if (stack.isEmpty()) {
                break;
            }
            int c = (int) stack.pop();
            break;
        case 3:

            Object o[] = stack.toArray();
            Arrays.sort(o);
            System.out.println(o[o.length - 1]);
            break;
        default:
            break;
    }
}

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);

    Stack<Integer> stack = new Stack<Integer>();

    int val = 0;

    int a = scan.nextInt();
    while (a-- > 0) {
        int t = scan.nextInt();
        if (t == 1) {
            val = scan.nextInt();
        }
        maxStack(t, val, stack);
    }
    scan.close();
}
}

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您之所以会浪费时间,是因为您每次对它们执行sort操作。这个问题可以通过两种方式解决

  1. 使用辅助堆栈使用O(1)时间和O(n)空间
  2. 使用O(1)时间和O(1)空间

insert, delete, max in O(1)