【问题标题】:Basics, data structures challenges, Max number in the stack基础知识、数据结构挑战、堆栈中的最大数量
【发布时间】:2019-03-20 05:26:01
【问题描述】:

大家好,我有一些数据结构挑战,我真的不知道如何更好地解决。

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

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

that way

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

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();
}
}

有什么推荐吗?

【问题讨论】:

  • 警告:您使用的是原始类型,即Stack 而不是Stack&lt;Integer&gt;。使用原始类型只允许向后兼容,不应该用新代码编写。
  • 那么也许您需要一种更好的方法来跟踪堆栈中的最大项。我建议你研究geeksforgeeks.org/…,但不要跟踪最小的项目,而是跟踪最大的项目。

标签: java data-structures


【解决方案1】:

您超出了时间,因为每次您对它们执行sort 操作。这个问题可以通过两种方式解决

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

insert, delete, max in O(1)

【讨论】:

    猜你喜欢
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 2016-08-06
    • 1970-01-01
    • 2011-05-15
    • 2021-05-29
    • 1970-01-01
    相关资源
    最近更新 更多