#include"iostream"
#include"stdio.h"
using namespace std; const int MAXN=;
const int INF=; template<typename T>class StackWithMin
{
public:
void push(const T& value);
void pop();
T min();
private:
int mSize=-;
int minNum=INF;
T* mData=new T[MAXN];
T* mMin=new T[MAXN];
}; template<typename T> void StackWithMin<T>::push(const T& value)
{
mData[++mSize]=value;
if(value<minNum)
{
minNum=value;
}
mMin[mSize]=minNum;
} template<typename T>void StackWithMin<T>::pop()
{
if(mSize<)
{
cout<<"stack is empty!"<<endl;
return;
}
mSize--;
} template<typename T>T StackWithMin<T>::min()
{
if(mSize<)
{
cout<<"stack is empty!"<<endl;
return INF;
}
return mMin[mSize];
} int main()
{
StackWithMin<double> s;
s.push();
cout<<s.min()<<endl;
s.push();
cout<<s.min()<<endl;
s.push();
cout<<s.min()<<endl;
s.push();
cout<<s.min()<<endl;
s.pop();
cout<<s.min()<<endl;
s.pop();
cout<<s.min()<<endl;
s.pop();
cout<<s.min()<<endl;
s.pop();
cout<<s.min()<<endl;
s.pop();
cout<<s.min()<<endl; return ;
}

官方代码:

 // 面试题30:包含min函数的栈
// 题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min
// 函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。 #pragma once #include <stack>
#include <assert.h> template <typename T> class StackWithMin
{
public:
StackWithMin() {}
virtual ~StackWithMin() {} T& top();
const T& top() const; void push(const T& value);
void pop(); const T& min() const; bool empty() const;
size_t size() const; private:
std::stack<T> m_data; // 数据栈,存放栈的所有元素
std::stack<T> m_min; // 辅助栈,存放栈的最小元素
}; template <typename T> void StackWithMin<T>::push(const T& value)
{
// 把新元素添加到辅助栈
m_data.push(value); // 当新元素比之前的最小元素小时,把新元素插入辅助栈里;
// 否则把之前的最小元素重复插入辅助栈里
if(m_min.size() == || value < m_min.top())
m_min.push(value);
else
m_min.push(m_min.top());
} template <typename T> void StackWithMin<T>::pop()
{
assert(m_data.size() > && m_min.size() > ); m_data.pop();
m_min.pop();
} template <typename T> const T& StackWithMin<T>::min() const
{
assert(m_data.size() > && m_min.size() > ); return m_min.top();
} template <typename T> T& StackWithMin<T>::top()
{
return m_data.top();
} template <typename T> const T& StackWithMin<T>::top() const
{
return m_data.top();
} template <typename T> bool StackWithMin<T>::empty() const
{
return m_data.empty();
} template <typename T> size_t StackWithMin<T>::size() const
{
return m_data.size();
}

StackWithMin.h

 // 面试题30:包含min函数的栈
// 题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min
// 函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。 #include <cstdio>
#include "StackWithMin.h" void Test(const char* testName, const StackWithMin<int>& stack, int expected)
{
if(testName != nullptr)
printf("%s begins: ", testName); if(stack.min() == expected)
printf("Passed.\n");
else
printf("Failed.\n");
} int main(int argc, char* argv[])
{
StackWithMin<int> stack; stack.push();
Test("Test1", stack, ); stack.push();
Test("Test2", stack, ); stack.push();
Test("Test3", stack, ); stack.push();
Test("Test4", stack, ); stack.pop();
Test("Test5", stack, ); stack.pop();
Test("Test6", stack, ); stack.pop();
Test("Test7", stack, ); stack.push();
Test("Test8", stack, ); return ;
}

test.cpp

只能说官方还是厉害,早知道用栈来模拟栈。。。

剑指offer——面试题30:包含min函数的栈的更多相关文章

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

    一开始写的垃圾代码,push和pop都是O(N) class Solution { public: vector<int> vec; int min_val=INT_MAX,min_cnt ...

  2. 剑指Offer:面试题21——包含min函数的栈(java实现)

    问题描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数.在该栈中,调用min,push及pop的时间复杂度都是O(1). 思路:加入一个辅助栈用来存储最小值集合 (这里要注 ...

  3. 剑指Offer - 九度1522 - 包含min函数的栈

    剑指Offer - 九度1522 - 包含min函数的栈2013-12-01 23:44 题目描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 输入: 输入可能包含多个测 ...

  4. 剑指offer(20)包含min函数的栈

    题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 题目分析 首先一开始我们分析得到最小值肯定要比较嘛,和栈里面的数据一一比较,但是栈这种数据结构,你又只能和栈顶弹出来的 ...

  5. 剑指offer二十之包含min函数的栈

    一.题目 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 二.思路 用一个栈dataStack保存数据,用另外一个栈minStack保存依次入栈最小的数.每次元素存入minSt ...

  6. 【剑指Offer】20、包含min函数的栈

      题目描述:   定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)).   解题思路:   使用两个stack,一个为数据栈,另一个为辅助栈.数据栈 ...

  7. 《剑指offer》面试题30. 包含min函数的栈

    问题描述 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.push 及 pop 的时间复杂度都是 O(1).   示例: MinStack minSt ...

  8. 剑指 Offer 30. 包含min函数的栈 + 双栈实现求解栈中的最小值

    剑指 Offer 30. 包含min函数的栈 Offer_30 题目描述: 题解分析: 题目其实考察的是栈的知识,本题的目的是使用两个栈来求解最小值. 第二个栈主要用来维护第一个栈中的最小值,所以它里 ...

  9. 剑指 Offer 30. 包含min函数的栈

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

  10. 力扣 - 剑指 Offer 30. 包含min函数的栈

    题目 剑指 Offer 30. 包含min函数的栈 思路1 使用一个辅助栈min_stack,用来维护栈的最小的元素 每次添加元素入栈时候,data_stack和min_stack都要同时维护 dat ...

随机推荐

  1. 20155311 2016-2017-2 《Java程序设计》第8周学习总结

    20155311 2016-2017-2 <Java程序设计>第8周学习总结 教材学习内容总结 通用API: •日志API • 日志: 日志对信息安全意义重大,审计.取证.入侵检测等都会用 ...

  2. 网络爬虫--requests库中两个重要的对象

    当我们使用resquests.get()时,返回的时response的对象,他包含服务器返回的所有信息,也包含请求的request的信息. 首先: response对象的属性有以下几个, r.stat ...

  3. [GO]redis的连接

    package main import ( "github.com/garyburd/redigo/redis" "fmt" ) var pool *redis ...

  4. Redis安装系统服务1073错误

    报错:D:\ProgramFiles\redis>redis-server.exe --service-install redis.windows.conf --loglevel verbose ...

  5. “undefined JNI_GetCreatedJavaVM”和“File format not recognized”错误原因分析

    如果编译时,报如下所示错误:../../third-party/hadoop/lib/libhdfs.a(jni_helper.c.o): In function `getGlobalJNIEnv': ...

  6. 快速排序(Quicksort)的Javascript实现(转载)

    日本程序员norahiko,写了一个排序算法的动画演示,非常有趣. 这个周末,我就用它当做教材,好好学习了一下各种排序算法. 排序算法(Sorting algorithm)是计算机科学最古老.最基本的 ...

  7. jsp中路径的写法

    在JavaWeb开发中,常使用绝对路径的方式来引入JavaScript和CSS文件,这样可以避免因为目录变动导致引入文件找不到的情况 代码” ${pageContext.request.context ...

  8. How To Use XDOLoader to Manage, Download and Upload Files? (DOC ID 469585.1)

    In this Document Goal Fix     Downloading Files   Uploading Files References Applies to: BI Publishe ...

  9. 自我介绍及如何注册GITHUB

    自我介绍 我是来自南通大学网络工程141班的周楠,我的学号是1413042014,我的兴趣是喜欢玩游戏(如果这算是一个兴趣爱好的话),喜欢尝试各种游戏. 如何注册一个GitHub账号? 1.首先我们需 ...

  10. [转]RTH试用手记之“额外功能”

    年初,罗德与施瓦茨公司(Rohde & Schwarz)推出了第一款的手持示波器,从指标上看,该示波器打破了传统手持器功能简单.指标水平低.结构粗糙的印象,取而代之达到了主流台式数字示波器的性 ...