zoukankan      html  css  js  c++  java
  • 包含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 };

  • 相关阅读:
    势函数的构造
    10.29模拟赛总结
    10.29vp总结
    10.25模拟赛总结
    10.24模拟赛总结
    线段树练习
    一键挖矿
    P1972 [SDOI2009]HH的项链
    P3901 数列找不同
    P5546 [POI2000]公共串
  • 原文地址:https://www.cnblogs.com/yangrenzhi/p/5784703.html
Copyright © 2011-2022 走看看