包含min函数的栈

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

  分析:要得到当前栈中最小的元素,可以另开辟一个栈,这个栈(下面以minData代替)和原始栈(下面用Data代替)保持同步,minData的顶部元素一直是当前Data中最小的元素,每次向Data中压入数据,都和minData的顶部数据比较,取小的入minData,由数学归纳法可以证得minData最顶部的元素是当前Data中最小的,实现代码如下

 1 #include<assert.h>
 2 class Solution {
 3 public:
 4     stack<int> data;
 5     stack<int> minData; 
 6     
 7     void push(int value) {
 8         data.push(value);
 9         if(minData.empty())
10             minData.push(value);
11         else{
12             int item = minData.top();
13             minData.push(item>value?value:item);
14         }
15     }
16     void pop() {
17         assert(data.size()>0 && minData.size()>0);
18         data.pop();
19         minData.pop();
20     }
21     int top() {
22         assert(data.size()>0);
23         return data.top();
24     }
25     int min() {
26         assert(minData.size()>0);
27         return minData.top();
28     }
29 };

原文地址:https://www.cnblogs.com/yangrenzhi/p/5784703.html