剑指offer面试题30--包含min函数的栈

1.题目描述:

定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数。在该栈中,调用min,push,pop,的时间复杂度都是O(1)

2.设计思想一

应用一个辅助栈,压的时候,如果待压入元素比B栈栈顶大,A压B不压,小于等于,AB栈同时压入,出栈,如果,AB栈顶元素不等,A出,B不出。

class Solution {
public:
     
    stack<int> stack1,stack2;
     
    void push(int value) {
        stack1.push(value);
        if(stack2.empty())
            stack2.push(value);
        else if(value<=stack2.top())
        {
            stack2.push(value);
        }
    }
     
    void pop() {
        if(stack1.top()==stack2.top())
            stack2.pop();
        stack1.pop();
         
    }
     
    int top() {
        return stack1.top();       
    }
     
    int min() {
        return stack2.top();
    }
     
};

设计思想2

压栈时候,A必压,B也压,B压包括待压元素在内的最小元素(也就是B压B栈顶和新元素的较小者);出栈时候,AB二者都是,不空就出栈顶(B栈顶必是最小元素)

#include <assert.h>
class Solution {
public:
   // stack<int> STACK;
   // stack<int> Min_STACK;
    //void push(int value) {
        
    //    STACK.push(value);
        
      //  if(Min_STACK.size()==0||(Min_STACK.size()!=0&&Min_STACK.top()>value))
         //   Min_STACK.push(value);
      //  else
        //   Min_STACK.push(Min_STACK.top());
       //    }
        
   // void pop() {
     //   assert(STACK.size()>0&&Min_STACK.size()>0);
     //   STACK.pop();
     //   Min_STACK.pop();

   // }
   // int top() {
    //    assert(STACK.size()>0);
        //    return STACK.top();
  //  }
   // int min() {
    //   assert(STACK.size()>0&&Min_STACK.size()>0);
    //    return Min_STACK.top();
   // }

注意:若实际题目没给出我们需要的头文件,在最顶上自己包含需要的头文件即可

猜你喜欢

转载自blog.csdn.net/qq_34793133/article/details/81041108
今日推荐