Leetcode 155—— Min Stack(最小栈)

博客分类: Leetcode 刷题笔记 阅读次数: 102 次

Leetcode 155—— Min Stack(最小栈)

题目描述

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

Example:
MinStack minStack = new MinStack();  
minStack.push(-2);  
minStack.push(0);  
minStack.push(-3);  
minStack.getMin();   --> Returns -3.  
minStack.pop();  
minStack.top();      --> Returns 0.  
minStack.getMin();   --> Returns -2.  

解题思路

此题目要求我们设计一个 最小栈, 除了支持 push , pop , top 这种 的常规操作之外,还需要支持查找栈内最小元素。

这里我们使用了两个栈 ,listminList ,前者用来存储数据,后者用来存储最小元素值(minList 的栈顶元素始终为当前 list 栈内的最小元素)。

参考代码

class MinStack {
public:
    /** initialize your data structure here. */
	stack<int> list, minList;
	int minNum;
	const int max = 2147483647;// “绝对”的最大值
    MinStack() 
    {
        minNum = max;
    }
    
    void push(int x) 
    {
        if (list.size() > 0)
        {
            list.push(x);

            if (x <= minNum)
            {
                minNum = x;
            }
            minList.push(minNum);
        }
        else
        {
            list.push(x);
            minNum = x;
            minList.push(minNum);
        }
    }
    
    void pop() 
    {
        if (list.size() > 0) 
        {
            list.pop();
            minList.pop();
            minNum = getMin();
        }
        else
        {
            list.pop();
            minList.pop();
            minNum = max;
        }
    }
    
    int top() 
    {
        return list.top();
    }
    
    int getMin() 
    {
    	if (minList.size() > 0)
        {
            return minList.top();
        }
        else
        {
            return max;
        }    
    }
};

/**
 * 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();
 */