* 题目:我现在需要实现一个栈,这个栈除了可以进行普通的push、pop操作以外,
* 还可以进行getMin的操作,getMin方法被调用后,会返回当前栈的最小值,
* 你会怎么做呢?你可以假设栈里面存的都是int整数。
#include <iostream>
#include <vector>
#include <stdio.h>
using namespace std;
class CMinStack
{
public:
CMinStack(){}
~CMinStack(){}
int getMin()
{
int iIndex = m_minList.back();
return m_dataList.at(iIndex);
}
void push(int num)
{
m_dataList.push_back(num);
if (0 == m_minList.size())
{
m_minList.push_back(0);
}
else
{
int iMin = getMin();
if (num < iMin)
{
m_minList.push_back(m_dataList.size() - 1);
}
}
return;
}
int pop()
{
if (0 == m_dataList.size())
{
return -1;
}
int popIndex = m_dataList.size() - 1;
int iMinIndex = m_minList.at(m_minList.size() - 1);
if (popIndex == iMinIndex)
{
m_minList.pop_back();
}
int iValue = m_dataList.at(popIndex);
m_dataList.pop_back();
return iValue;
}
private:
vector<int> m_dataList;
vector<int> m_minList;
};
1、使用了空间(双栈,一个存储实际数据,一个存储最小值所对应的索引)换时间,提高 getMin() 的效率
2、异常处理尚不正确,后续再 Say 了
——源自优快云公众号里面的一篇文章 “【面试现场】如何实现可以获取最小值的栈?”