剑指offer 面试30题

面试30题:

题目:包含min函数的栈

题:定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。在该栈中,调用min、push、pop的时间复杂度都是O(1)

解题思路:1)如果每次压入新元素时,再调整让新元素位于栈顶,这种思路不能保证最后压入栈的元素最先出栈,因此这个数据结构已经不是栈了。X

               2)如果在栈中添加一个成员变量存放最小元素,那么当最小元素弹出后,就不知道下一个最小元素在哪儿了。因此,必须将次小元素保存。X

     3)把每次的最小元素保存起来放在另一个辅助栈里。 √

解题代码:

# -*- coding:utf-8 -*-
class Solution:
    def __init__(self):
        self.stack=[]
        self.minstack=[]
    
    def push(self, node):
        # write code here
        self.stack.append(node)
        if self.minstack==[] or node<self.min():
            self.minstack.append(node)
        else:
            self.minstack.append(self.min())
        
    def pop(self):
        # write code here
        if self.stack==[] or self.minstack==[]:
            return None
        self.stack.pop()
        self.minstack.pop()
        
    def top(self):
        # write code here
        return self.stack[-1]
    def min(self):
        # write code here
        return self.minstack[-1]

 

posted @ 2018-06-23 15:49  Fintech带你飞  阅读(840)  评论(0编辑  收藏  举报