zoukankan      html  css  js  c++  java
  • 剑指Offer19 包含min函数的栈

     1 /*************************************************************************
     2     > File Name: 19_MinInStack.cpp
     3     > Author: Juntaran
     4     > Mail: JuntaranMail@gmail.com
     5     > Created Time: 2016年08月30日 星期二 19时29分48秒
     6  ************************************************************************/
     7 
     8 #include <stdio.h>
     9 #include <bits/stdc++.h>
    10 
    11 using namespace std;
    12 
    13 template<class T>
    14 class minStack
    15 {
    16 private:
    17     stack<T> stack_data;
    18     stack<T> stack_min;
    19     
    20 public:
    21 
    22     void push(T &value)
    23     {
    24         // 新元素入栈
    25         stack_data.push(value);
    26         
    27         // 新元素比之前最小元素小的时候,新元素进入辅助栈
    28         // 否则把之前最小元素重复插入辅助栈
    29         if (stack_min.size()==0 || value<stack_min.top())
    30             stack_min.push(value);
    31         else
    32             stack_min.push(stack_min.top());
    33     }
    34     T pop()
    35     {
    36         assert(stack_data.size()>0 && stack_min.size()>0);
    37         stack_data.pop();
    38         stack_min.pop();
    39         return stack_data.top();
    40     }
    41     T min()
    42     {
    43         assert(stack_data.size()>0 && stack_min.size()>0);
    44         return stack_min.top();
    45     }
    46 };
    47 
    48 int main()
    49 {
    50     minStack<int> mStack;
    51     for (int i = 0; i < 5; i++)
    52     {
    53         cout << i << " push" << endl;
    54         mStack.push(i);
    55     }
    56     cout << "min is " << mStack.min() << endl;
    57     for (int i = 1; i < 3; i++)
    58     {
    59         cout << mStack.pop() << " pop" << endl;
    60     }
    61     cout << "min is " << mStack.min() << endl;
    62     for (int i = 5; i < 7; i++)
    63     {
    64         cout << i << " push" << endl;
    65         mStack.push(i);
    66     }
    67     cout << "min is " << mStack.min() << endl;
    68     for (int i = 1; i < 3; i++)
    69     {
    70         cout << mStack.pop() << " pop" << endl;
    71     }
    72     int k = -1;
    73     mStack.push(k);
    74     cout << "min is " << mStack.min() << endl;
    75     cout << endl;
    76 }
  • 相关阅读:
    Linux stress 命令
    接口安全设计
    2019年MTP管理技能提升培训笔记
    Docker运行图形化程序
    CentOS7搭建本地YUM仓库,并定期同步阿里云源
    搭建私服-docker registry
    linux剪贴板
    如何搭建Docker私有仓库
    彻底解决 LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
    为人父母始知天下事---“宝宝哭了”的问题来说说什么是分析,什么是设计
  • 原文地址:https://www.cnblogs.com/Juntaran/p/5823511.html
Copyright © 2011-2022 走看看