leetcode-最小栈-59

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

思路
  设计上两个栈,data_st负责存储数据,和正常的栈一样,还有一个min_st,只负责存储小的元素,当有和min_st栈顶元素大小一样或者相等的元素存储进去。如果要出栈,先从data_st的栈顶元素出栈,然后判断min_st的栈顶元素和data_st出栈的元素大小相同不,如果相同min_st也需要出栈,如果不相同,说明min_st中没有这个元素,也不用出栈。top方法和getMin方法只需要返回data_st和min_st对应栈顶的元素即可。

代码实现

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

    }

    void push(int val) {
        data_st.push(val);
        if(min_st.empty() || val<=min_st.top())
            min_st.push(val);
    } 

    void pop() {
        int val = data_st.top();
        data_st.pop();
        if(val == min_st.top())
        min_st.pop();
    }

    int top() {
        return data_st.top();
    }

    int getMin() {
        return min_st.top();
    }
private:
    stack data_st;
    stack min_st;
};

你可能感兴趣的:(oj题)