Min Stack

本题收获:

1.可以利用两个栈操作。

2.栈的基本操作。

  题目:

  Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.

  • push(x) -- Push element x onto stack.
  • pop() -- Removes the element on top of the stack.
  • top() -- Get the top element.
  • getMin() -- Retrieve the minimum element in the stack.

  Example:

  MinStack minStack = new MinStack();
  minStack.push(-2);
  minStack.push(0);
  minStack.push(-3);
  minStack.getMin(); --> Returns -3.
  minStack.pop();
  minStack.top(); --> Returns 0.
  minStack.getMin(); --> Returns -2.

  思路:

    我的思路:没有思路。

    leetcode/dicuss思路:

      弄2个stack,一个realStack,存放真正的数据;另外一个是minStack。

      对于minStack元素中的每一个元素的意义是:push到 该位置的时候,当前最小元素的值。每次push进新元素的时候,更新minStack的值;每次pop的时候,由于minStack的定义,所以只需把 minStack和realStack一起进行一次pop操作就好了。

      minstack只存储最小元素,每次Push时将输入元素与minstack中的元素对比,如果小于minstack则push,否则不操作。pop时,如果minstack的元素等于realstack中元素则pop,否则不操作。

    代码:

 class MinStack {
private:
stack<int> s1;
stack<int> s2;
public:
void push(int x) {
s1.push(x);
if (s2.empty() || x <= getMin()) s2.push(x);
}
void pop() {
if (s1.top() == getMin()) s2.pop();
s1.pop();
}
int top() {
return s1.top();
}
int getMin() {
return s2.top();
}
};

  我的带mian函数的测试代码:

 // minStack.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include "iostream"
#include "stack"
using namespace std; class MyClass
{
public:
void push(int val);
void pop();
int minStack();
int top();
private:
stack<int> realstack;
stack<int> minstack;
}; void MyClass::push(int val)
{
realstack.push(val);
if (minstack.empty() || val <= minstack.top()) minstack.push(val);
} void MyClass::pop()
{
if (realstack.top() == minstack.top()) //注意pop的顺序,先比较在pop,不是先pop在比较
{
minstack.pop();
}
realstack.pop();
} int MyClass::top()
{
return realstack.top();
} int MyClass::minStack()
{
return minstack.top();
} int _tmain(int argc, _TCHAR* argv[])
{
MyClass solution;
int val = ;
cout << "the value is : ";
for (int i = ; i < ; i++)
{
cin >> val;
solution.push(val);
}
cout << "the min is : " << solution.minStack() << endl;
for (int i = ; i < ; i++)
{
int value = solution.top();
cout << "pop value is : " << value << endl;
//cin >> val;
solution.pop();
}
cout << "current min is : " << solution.minStack() << endl;
system("pause");
return ;
}

  测试结果:

  aaarticlea/png;base64,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" alt="" />  

参考了:http://www.cnblogs.com/lihaozy/archive/2012/12/09/2809840.html

      写的非常详细!

  代码2:

 class MinStack {
public:
vector<int> a;
vector<int> min;
MinStack() {
min.push_back();
}
void push(int x) {
a.push_back(x);
if (x < min.back()) {
min.push_back(x);
} else {
min.push_back(min.back());
}
} void pop() {
a.pop_back();
min.pop_back();
} int top() {
return a.back();
} int getMin() {
return min.back();
}
};

最新文章

  1. UIScrollView的delaysContentTouches与canCencelContentTouches属性
  2. 微软承诺将在今年的 Visual C++ 更新中加入 Clang 编译器
  3. QTableWidget控件总结&lt;二&gt;
  4. JAVA字节码解析
  5. 往UISegmentedControl上添加几个控制器
  6. POJ 3170 Knights of Ni (暴力,双向BFS)
  7. Energy Minimization
  8. Hadoop map reduce 任务数量优化
  9. IT第七天 - 类及其属性、方法的理解,断点调试初识,代码优化总结,编程逻辑培养
  10. swift 2中关键字和解释整理
  11. 语法之进化论之lambda表达式
  12. 三对角线性方程组(tridiagonal systems of equations)的求解
  13. (转)python函数: 内置函数
  14. Android -- ImageLoader简析
  15. 201621123010 《Java程序设计》第2周学习总结
  16. python学习笔记-控制流(if for while break continue)
  17. QuantLib 金融计算——数学工具之随机数发生器
  18. 使用NPOI,完成数据的导入导出
  19. 大数据时代数据库-云HBase架构&amp;生态&amp;实践
  20. C#操作Json数据

热门文章

  1. MySQL的间隙锁
  2. Java的checked exception与unchecked exception
  3. Python动态规划求解最长递增子序列(LIS)
  4. 先验算法(Apriori algorithm) - 机器学习算法
  5. 【Python】python 2 map() reduce()
  6. JVM中各种变量保存位置
  7. Redis学习基础三
  8. QT 登陆对话框
  9. django中的request对象详解
  10. java字节码文件 helloworld