day21(包含min函数的栈)

题目描述

定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
 
 
提交链接: 点击
 
 
思路:利用一个辅助栈,入栈的时候,如果入A栈元素的value比A栈栈顶元素值大,则只入A栈,小于等于等AB都入;出栈的时候,如果AB栈顶元素不相等,A出,B不出。
 
 
代码:
class Solution {
public:
    stack<int> stack1,stack2;
    void push(int value) {  //如果入栈的是最小值,则同样入辅助栈
        if(stack1.empty()){  //当栈为空的时候,将value同时入栈,因为一个元素的时候他就是最小值
            stack1.push(value);
            stack2.push(value);
        }else{//当栈不为空的时候,将最小值入辅助栈
            if(value<=stack1.top()){
                stack2.push(value);
            }
            stack1.push(value);
        }
     /*
      stack1.push(value);
          if(stack2.empty()) stack2.push(value);
          else if(value<=stack2.top()){
        stack2.push(value);
      }
     */

    }
    void pop() {
        int temp=stack1.top();
        stack1.pop();
        if(temp==stack2.top()) stack2.pop(); //如果弹出的是最小值,则辅助栈也弹出
    }
    int top() {
        return stack1.top();
    }
    int min() {
        return stack2.top();
    }
};

猜你喜欢

转载自www.cnblogs.com/logo-88/p/9746779.html
今日推荐