面试题21包含min函数的栈
2017-05-30 19:09
295 查看
题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。
思路:
如果只用一个元素保存最小的元素,那么当最小的元素被弹出后,就没有办法得到剩余元素中最下的元素。
所以,最好的办法是将每次的最小元素(之前的最小元素和新压入的元素两者的较小者)都保存起来放到另外一个辅助栈里。
这是剑指offer书中的举例一个模拟过程:
#include<iostream>
#include<vector>
#include<stack>
#include<cassert>
using namespace std;
template<typename T>
class StackMin{
public:
stack<T> data;
stack<size_t> minStack;
void push(const T& val)
{
data.push(val);
if(minStack.size()==0||val<minStack.top())
minStack.push(val);
else
minStack.push(minStack.top());
}
void pop()
{
assert(data.size()>0&&minStack.size()>0);
data.pop();
minStack.pop();
}
const T& min()
{
assert(data.size()>0&&minStack.size()>0);
return minStack.top();
}
};
int main()
{
StackMin<int> s;
s.push(3);
cout<<s.min()<<endl;
s.push(4);
cout<<s.min()<<endl;
s.push(2);
cout<<s.min()<<endl;
s.push(1);
cout<<s.min()<<endl;
s.pop();
cout<<s.min()<<endl;
s.pop();
cout<<s.min()<<endl;
s.push(0);
cout<<s.min()<<endl;
system("pause");
return 0;
}
思路:
如果只用一个元素保存最小的元素,那么当最小的元素被弹出后,就没有办法得到剩余元素中最下的元素。
所以,最好的办法是将每次的最小元素(之前的最小元素和新压入的元素两者的较小者)都保存起来放到另外一个辅助栈里。
这是剑指offer书中的举例一个模拟过程:
#include<iostream>
#include<vector>
#include<stack>
#include<cassert>
using namespace std;
template<typename T>
class StackMin{
public:
stack<T> data;
stack<size_t> minStack;
void push(const T& val)
{
data.push(val);
if(minStack.size()==0||val<minStack.top())
minStack.push(val);
else
minStack.push(minStack.top());
}
void pop()
{
assert(data.size()>0&&minStack.size()>0);
data.pop();
minStack.pop();
}
const T& min()
{
assert(data.size()>0&&minStack.size()>0);
return minStack.top();
}
};
int main()
{
StackMin<int> s;
s.push(3);
cout<<s.min()<<endl;
s.push(4);
cout<<s.min()<<endl;
s.push(2);
cout<<s.min()<<endl;
s.push(1);
cout<<s.min()<<endl;
s.pop();
cout<<s.min()<<endl;
s.pop();
cout<<s.min()<<endl;
s.push(0);
cout<<s.min()<<endl;
system("pause");
return 0;
}
相关文章推荐
- 【剑指offer】面试题21:包含min函数的栈
- 【剑指offer】面试题21:包含min函数的栈
- 剑指Offer_面试题21_包含min函数的栈
- 剑指offer面试题21之包含min函数的栈
- 《剑指Offer》学习笔记--面试题21:包含min函数的栈
- 剑指offer-面试题21:包含min函数的栈
- 剑指offer-面试题21.包含min函数的栈
- 面试题21:栈:包含min函数的栈
- Java - 剑指offer_面试题21_包含min函数的栈
- 面试题21:包含min函数的栈
- 剑指offer——面试题21:包含min函数的栈(泛型编程,一个巧妙的思维)
- 剑指offer_面试题21_包含min函数的栈
- 【剑指offer 面试题21】包含min函数的栈
- 剑指offer——面试题21:包含min函数的栈
- 面试题21:包含min函数的栈
- 剑指offer面试题21:包含min函数的栈
- 面试题21:包含min函数的栈
- 面试题21:包含min函数的栈
- 剑指offer 面试题21 包含min函数的栈
- [剑指offer][面试题21]包含min函数的栈