STL模板库最后一题思路

要解决M海运公司仓库货物进出情况统计问题,可以使用栈数据结构来实现。本菜鸟的思路:

  1. 理解问题背景
  • M海运公司的仓库记录了集装箱的入库和出库操作,遵循先进后出的原则。
  • 日志中包含三种操作:入库、出库和查询最大重量(格式为2)。(没啥用,就是读题)
  1. 设计栈数据结构
  • 使用一个栈来存储集装箱的重量,每次有新的集装箱入库时,将其重量压入栈中。
  • 当有出库操作时,从栈顶弹出最近入库的集装箱重量。
  • 在查询操作时,需要找到当前栈顶元素,即当前仓库中最大集装箱的重量。
  1. 处理查询操作
  • 由于栈是后进先出的数据结构,直接获取栈顶元素即可得到当前最大重量。但是,如果每次查询都需要遍历整个栈以找到最大值,则时间复杂度会很高。
  • 可以使用单调栈的方法,维护一个辅助栈来存储当前的最大值。当有新的集装箱入库时,如果其重量大于等于辅助栈的栈顶元素,则将该元素压入辅助栈;否则,将辅助栈的栈顶元素弹出,直到找到一个大于等于新元素的值为止。这样可以保证辅助栈始终存储当前的最大值。
  1. 代码实现
  • 初始化两个栈:一个用于存储集装箱重量(主栈),另一个用于存储当前的最大值(辅助栈)。

  • 对于每条日志记录:

  • 如果是入库操作,将集装箱重量压入主栈,并根据单调栈的方法更新辅助栈。

  • 如果是出库操作,从主栈中弹出最近入库的集装箱重量。

  • 如果是查询操作,输出辅助栈的栈顶元素作为当前最大集装箱重量。

  1. 优化与效率
  • 使用单调栈的方法可以在O(1)时间内完成查询操作,而不需要遍历整个栈,从而提高了算法效率。
  • 对于大规模数据集(例如N≤200000),这种方法能够有效处理查询操作,并且避免了不必要的空间浪费。(防止TLE)
1 个赞

浅问:大佬们STL模板库过关了吗