NC90 包含min函数的栈

描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的 min 函数,输入操作时保证 pop、top 和 min 函数操作时,栈中一定有元素。

此栈包含的方法有: push(value):将value压入栈中 pop():弹出栈顶元素 top():获取栈顶元素 min():获取栈中最小元素

数据范围:操作数量满足0<=n<=300,输入的元素满足|val|<=10000

进阶:栈的各个操作的时间复杂度是O(1),空间复杂度是O(n)

思路:其它都还好,主要是min()这个方法要求时间复杂度为O(1),我本来觉得不可能,因为栈是无序的,在无序数组中找最小值,应该要遍历一遍数组。看评论才知道,是用空间换时间。专门存了一个辅助栈来保存最小值,这样就简单了,算法也没啥好说的。我看到空间复杂度为O(n),以为就是栈的长度,这样其实空间复杂度是O(2n)了

min函数算法:每次进来一个元素,一个栈直接存入,另一个辅助栈会判断,如果当前元素小于辅助栈栈顶(即栈的最小值)时,将该元素放入,否则放入辅助栈栈顶元素。每次取出也是栈和辅助栈一起取出。

class Solution:
    data = []
    minData = []
    def push(self, node):
        # write code here
        self.data.append(node)
        if len(self.minData) == 0:
            self.minData.append(node)
        elif node < self.minData[len(self.minData)-1]:
            self.minData.append(node)
        else:
            self.minData.append(self.minData[len(self.minData)-1])
    def pop(self):
        # write code here
        self.data.pop()
        self.minData.pop()
    def top(self):
        # write code here
        return self.data[len(self.data)-1]
    def min(self):
        # write code here
        return self.minData[len(self.minData)-1]