数据结构与算法之最小栈

最小栈

题目

设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。
push(x) – 将元素 x 推入栈中。
pop() – 删除栈顶的元素。
top() – 获取栈顶元素。
getMin() – 检索栈中的最小元素。

示例:

MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.getMin(); --> 返回 -2.
链接:https://leetcode-cn.com/problems/min-stack

思路

使用一个栈存储最小值,每次要入栈值时,如果最小栈不存在值,则同时将此值直接存入最小栈,否则比较入栈的值是否小于等于最小栈的栈顶的值,如果成立,则同时在最小栈Push该值,每次出栈时,比较该值时候等于最小栈的栈顶的值,如果相等,则同时在最小栈顶端移除该值。
获取最小值时直接弹出最小栈的栈顶即可。

源代码(C#)

public class MinStack
{
    Stack<int> stack = new Stack<int>();
    Stack<int> minStack = new Stack<int>();

    /** initialize your data structure here. */
    public MinStack()
    {
    }

    public void Push(int x)
    {
        if (minStack.Count == 0)
        {
            minStack.Push(x);
        }
        else
        {
            if (minStack.Peek() >= x)
            {
                minStack.Push(x);
            }
        }

        stack.Push(x);
    }

    public void Pop()
    {
        if (stack.Count == 0) return;
        var value = stack.Pop();
        if (value == minStack.Peek())
        {
            minStack.Pop();
        }
    }

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

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

结果

在这里插入图片描述

发布了15 篇原创文章 · 获赞 4 · 访问量 1644

猜你喜欢

转载自blog.csdn.net/Mr_Angier/article/details/105026435
今日推荐