返回

算法题:设计包含min函数的栈

见解分享

算法的由来:

本文写这篇文章主要为了提高自己的算法思路,并且因为本来就是算法类的问题,从前在书籍看到过比较简单的解法,我们一起来了解一下:

栈基本知识

栈是一种后进先出的数据结构,这意味着后添加的元素将首先被移除。栈可以用数组或链表实现,其中数组实现更为简单。栈的基本操作包括:

  • push(x): 将元素 x 压入栈顶。
  • pop(): 从栈顶弹出并返回元素。
  • peek(): 返回栈顶元素,但不弹出它。
  • isEmpty(): 检查栈是否为空。

min函数的设计思路

为了在栈中实现min函数,我们需要在栈中存储额外的信息。我们可以使用另一个栈来存储栈中元素的最小值。当我们向栈中压入一个元素时,我们同时将该元素与当前最小值进行比较,并将较小的值压入辅助栈。当我们从栈中弹出元素时,我们同时从辅助栈中弹出对应的最小值。这样,我们就可以在每次向栈中压入或弹出元素时维护辅助栈中最小值的正确性。

代码实现

class StackWithMin:
    def __init__(self):
        self.stack = []
        self.min_stack = []

    def push(self, x):
        self.stack.append(x)
        if not self.min_stack or x <= self.min_stack[-1]:
            self.min_stack.append(x)

    def pop(self):
        if self.stack[-1] == self.min_stack[-1]:
            self.min_stack.pop()
        return self.stack.pop()

    def peek(self):
        return self.stack[-1]

    def isEmpty(self):
        return len(self.stack) == 0

    def getMin(self):
        return self.min_stack[-1]

## **示例** 

```python
stack = StackWithMin()
stack.push(3)
stack.push(5)
stack.push(2)
stack.push(1)
stack.push(4)

print(stack.getMin())  # 输出:1
stack.pop()
print(stack.getMin())  # 输出:1
stack.pop()
print(stack.getMin())  # 输出:2
stack.pop()
print(stack.getMin())  # 输出:3
stack.pop()
print(stack.getMin())  # 输出:5

结语

包含min函数的栈是一种非常实用的数据结构,它可以帮助我们快速找到栈中的最小元素。我们在文章中介绍了包含min函数的栈的设计思路和代码实现,并给出了一个示例。希望本文对您有所帮助。