[Leetcode 155, Easy] Min Stack

本文介绍了一种特殊的数据结构——栈,该栈支持在常数时间内进行push、pop、top操作及获取最小元素。通过维护两个栈,一个保存所有元素,另一个保存局部最小值,确保了操作效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Problem:

Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.

  • push(x) -- Push element x onto stack.
  • pop() -- Removes the element on top of the stack.
  • top() -- Get the top element.
  • getMin() -- Retrieve the minimum element in the stack.
Analysis:

The basic idea does not comes from me. In this stack-like structure, we keep two stacks, one for all elements inserts by their original order, and the other one is for the local minimum one compared with elements before it. If the minimum element is not the last one inserted into the stack, and those ones after it are larger than it, the minimum element will not change. (i.e., the top element of the minimal value stack will not change.)

The minimum comes from the min-stack. When the minimun element is removed from the stack, it will be removed from the min-stack either. It is easy to see that the remained elements also abide by the rules set in the last paragraph. The stack-like structure works fine.

Note: If the size of inputed elements is big, the vector is not safe because its way of increasing size. (Important!!!)

Solutions:

C++:

void push(int x) {  
        data.push(x);  
        if(mindata.empty()||mindata.top()>=x)
            mindata.push(x);  
    }  
  
    void pop() {  
        if(mindata.top()==data.top())
            mindata.pop();  
        data.pop();  
    }  
  
    int top() {  
        return data.top();  
    }  
  
    int getMin() {  
        return mindata.top();  
    }  
private:  
    stack<int> data;  
    stack<int> mindata;


Java:


Python:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值