本文共 1598 字,大约阅读时间需要 5 分钟。
栈(Stack)的数据结构,本质上是一种Last-In-First-Out(LIFO)的线性数据结构。栈的核心操作包括push(压栈)、pop(弹栈)和top(获取栈顶元素)。为了实现栈中的最小值(min)查询,同时确保push、pop和min的时间复杂度均为O(1),我们需要引入一个辅助栈来维护当前栈中最小值的相关信息。
在本文中,我们将通过一个名为MinStack的数据类来实现上述目标。MinStack类包含两个栈:dataStack用来存储所有push进去的数据;minStack则用来存储辅助信息,辅助信息主要是帮助我们快速找到栈中的最小值。
我们使用辅助栈(minStack)来维护当前栈中最小值的相关信息。具体来说:
push操作:
pop操作:
min操作:
这种方法可以在O(1)的时间复杂度内完成push、pop和min操作。
以下是MinStack类的完整实现代码:
var MinStack = function () { this.dataStack = []; this.minStack = [];};MinStack.prototype.push = function (x) { this.dataStack.push(x); const length = this.minStack.length; if (length === 0 || x <= this.minStack[length - 1]) { this.minStack.push(x); }};MinStack.prototype.pop = function () { const { minStack, dataStack } = this; if (minStack[minStack.length - 1] === dataStack[dataStack.length - 1]) { minStack.pop(); } dataStack.pop();};MinStack.prototype.top = function () { const length = this.dataStack.length; if (!length) { return null; } else { return this.dataStack[length - 1]; }};MinStack.prototype.min = function () { const length = this.minStack.length; if (!length) { return null; } else { return this.minStack[length - 1]; }}; 通过引入辅助栈的方式,我们可以在O(1)的时间复杂度内实现栈的push、pop和min操作。这一设计巧妙地结合了栈的基本操作和最小值查询的需求,确保在处理大数据量时依然能够高效运行。这种设计方法既简洁又高效,是实现高性能栈操作的经典解决方案。
转载地址:http://yqqmz.baihongyu.com/