Leecode 155.最小栈

题目

在这里插入图片描述
添加链接描述

解题思路

采用辅助栈的方法

  • 创建一个栈,储存数据,并创建一个辅助栈用来储存最小值
  • 储存数据时如果小于辅助栈栈顶数据时候,同时储存进辅助栈
  • 删除栈元素时候考虑是否为辅助栈栈顶元素
  • 返回最小值时候,就返回辅助栈栈顶元素
//C#语言实现
public class MinStack {

    //创建数据栈
    Stack<int> stack = new Stack<int>();
    //创建辅助栈
    Stack<int> min_stack = new Stack<int>();
    
    /** initialize your data structure here. */
    public MinStack() {
    }
    
    public void Push(int x) {
    //当辅助栈元素为0
        if (min_stack.Count == 0)
                min_stack.Push(x);
        else
        {            
        //判断辅助栈栈顶元素与新加入元素的大小,如果小于辅助栈栈顶元素,加入辅助栈
          if (min_stack.Peek() >= x)
              min_stack.Push(x);
        }
        stack.Push(x);

    }
    
    public void Pop() {
    //判断数据栈是否为空
        if(stack.Count==0)
        return;
        //抛出数据栈栈顶元素,并将值赋给value
        var value = stack.Pop();
        //判断辅助栈栈顶元素与value是否相等
        if (value == min_stack.Peek())
        {
            min_stack.Pop();
        }

    }
    
    public int Top() {
        return stack.Peek();

    }
    
    public int GetMin() {
        return min_stack.Peek();

    }
}

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack obj = new MinStack();
 * obj.Push(x);
 * obj.Pop();
 * int param_3 = obj.Top();
 * int param_4 = obj.GetMin();
 */

在这里插入图片描述

python实现

#python实现

class MinStack(object):

    def __init__(self):
        """
        initialize your data structure here.
        """
        self.stack=[]
        self.min_stack=[]

    def push(self, x):
        """
        :type x: int
        :rtype: None
        """
        self.stack.append(x)
        if not self.min_stack or self.min_stack[-1]>=x:
            self.min_stack.append(x)

    def pop(self):
        """
        :rtype: None
        """
        if self.stack[-1]==self.min_stack[-1]:
            self.min_stack.pop()
        self.stack.pop()
        

    def top(self):
        """
        :rtype: int
        """
        return self.stack[-1]
        # 因为添加元素使用append的方法,最后进入list的在最右边,所以使用[-1]来访问

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

在这里插入图片描述

发布了52 篇原创文章 · 获赞 5 · 访问量 3972

猜你喜欢

转载自blog.csdn.net/Pang_ling/article/details/105039972
今日推荐