题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。
思路:
增加一个数据域用来记录最小元素,如果当前入栈元素不大于最近一次保存的最小值,那么将当前值保存为最近一次保存的最小值
import numpy as np
class MinStack:
def __init__(self):
"""
initialize your data structure here.
"""
self.s1 = np.array([]) # 按入栈顺序保存元素本身
self.s2 = np.array([]) # 按入栈顺序保存每次入栈时的最小元素
def push(self, x: int) -> None:
self.s1 = np.append(self.s1, x)
if self.s2.size == 0 or self.s2[self.s2.size-1] >= x:
self.s2 = np.append(self.s2, x) # s2栈尾元素比当前元素大或者相等,那么当前元素就是最小元素
def pop(self) -> None:
"""两个栈尾元素相等时,那么表示当前删除的就是最小值,将两个栈尾元素都删除"""
if self.s1[self.s1.size-1] == self.s2[self.s2.size-1]:
self.s2 = np.delete(self.s2, self.s2.size-1)
self.s1 = np.delete(self.s1, self.s1.size-1)
def top(self) -> int:
e = self.s1[self.s1.size-1]
return int(e)
def min(self) -> int:
e = self.s2[self.s2.size-1]
return int(e)