min最小栈(Python解法)

包含min函数的栈

http://www.nowcoder.com/questionTerminal/4c776177d2c04c2494f2555c9fcc1e49


思路:栈stack保存数据,辅助栈assist保存依次入栈最小的数
       stack中依次入栈,6,5,8,4,3,9
          assist依次入栈,6,5,4,3
每次入栈的时候,如果入栈的元素比assist中的栈顶元素小或等于则入栈,否则不如栈。
# -*- coding:utf-8 -*-
class Solution:
    def __init__(self):
        self.stack = []    #数据栈
        self.assist = []   #辅助栈
    def push(self, node):
        # write code here
        min = self.min()             #得到栈中元素的最小值
        if min > node&nbs***bsp;not min:    #若待入栈的元素值小于栈中最小值或栈为空时
            self.stack.append(node)  #将这个元素分别压入数据栈和辅助栈
            self.assist.append(node)
        else:
            self.stack.append(node)  #否则只将这个元素压入数据栈
    def pop(self):
        # write code here
        if self.stack:
            if self.stack[-1] == self.assist[-1]:  #若数据栈和辅助栈的栈顶的元素值相等
                self.stack.pop()                   #则分别将这两个栈的栈顶元素弹出
                self.assist.pop()
            else:
                self.stack.pop()   #否则只弹出数据栈的栈顶元素
    def top(self):
        # write code here
        if self.stack:
            return self.stack[-1]  #返回数据栈的栈顶元素
    def min(self):
        # write code here
        if self.assist:
            return self.assist[-1] #返回辅助栈顶层元素,即最小值


全部评论
push那里是否有点问题? 判断条件应该是min >= node吧,否则如果有与最小值相等的值压入栈,后面pop的时候会将assist中唯一的最小值弹出,而此时实际上栈中还有该最小值,辅助栈中却没有了。
2 回复 分享
发布于 2020-03-04 11:11
pop函数里self.stack.pop() #则分别将这两个栈的栈顶元素弹出 self.assist.pop() 请问一下这个情况是弹出2个值吗?这样可以吗?求大神解答
点赞 回复 分享
发布于 2020-01-28 22:49
请问这是什么意思 node&nbs***bsp
点赞 回复 分享
发布于 2021-08-12 18:42
代码是错的。。。需要改进一些小问题
点赞 回复 分享
发布于 2021-09-15 15:05

相关推荐

宁波中车时代传感 硬件工程师 总包15W,基本工资8k多一点,15薪
点赞 评论 收藏
分享
给我一个offer吧求求啦:轮到大佬给公司发感谢信了,想想就爽
点赞 评论 收藏
分享
6 2 评论
分享
牛客网
牛客企业服务