2016.6.1——Min Stack
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();
}
};
2016.6.1——Min Stack的更多相关文章
- [LintCode] Min Stack 最小栈
Implement a stack with min() function, which will return the smallest number in the stack. It should ...
- [CareerCup] 3.2 Min Stack 最小栈
3.2 How would you design a stack which, in addition to push and pop, also has a function min which r ...
- leetcode 155. Min Stack --------- java
Design a stack that supports push, pop, top, and retrieving the minimum element in constant time. pu ...
- Min Stack [LeetCode 155]
1- 问题描述 Design a stack that supports push, pop, top, and retrieving the minimum element in constant ...
- Min Stack
Min Stack Design a stack that supports push, pop, top, and retrieving the minimum element in constan ...
- Java [Leetcode 155]Min Stack
题目描述: Design a stack that supports push, pop, top, and retrieving the minimum element in constant ti ...
- 155. Min Stack
题目: Design a stack that supports push, pop, top, and retrieving the minimum element in constant time ...
- leetCode Min Stack解决共享
原标题:https://oj.leetcode.com/problems/min-stack/ Design a stack that supports push, pop, top, and ret ...
- LeetCode算法题-Min Stack(Java实现)
这是悦乐书的第177次更新,第179篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第36题(顺位题号是155).设计一个支持push,pop,top和在恒定时间内检索最小 ...
随机推荐
- P2231 [HNOI2002]跳蚤
题目描述 Z城市居住着很多只跳蚤.在Z城市周六生活频道有一个娱乐节目.一只跳蚤将被请上一个高空钢丝的正中央.钢丝很长,可以看作是无限长.节目主持人会给该跳蚤发一张卡片.卡片上写有N+1个自然数.其中最 ...
- Mac突然连不上WiFi
标签(空格分隔): 杂七杂八的问题 从昨晚开始,Mac突然连不上WiFi了,人又在图书馆,上不了网好焦急.于是搜了很多方法,也不知是哪个起作用了,反正现在可以了. 步骤一 打开"Finder ...
- 【uoj219】 NOI2016—优秀的拆分
http://uoj.ac/problem/219 (题目链接) 题意 一个字符串求它有多少个形如AABB的子串. Solution 其实跟后缀数组里面一个论文题poj3693处理方式差不多吧. 先处 ...
- rsync同步公网yum源搭建本地yum仓库
镜像同步公网yum源上游yum源必须要支持rsync协议,否则不能使用rsync进行同步. centos源:rsync://rsync.mirrors.ustc.edu.cn/centos/ epel ...
- C++运算符重载形式——成员函数or友元函数
运算符重载是C++多态的重要实现手段之一.通过运算符重载对运算符功能进行特殊定制,使其支持特定类型对象的运算,执行特定的功能,增强C++的扩展功能. 运算符重载的我们需要坚持四项基本原则: (1)不可 ...
- Gradle 命令之 --stacktrace , --info , --debug 用法
FAQ: Android studio 出现错误Run with --stacktrace option to get the stack trace. Run with --info or --de ...
- LigerUI下拉选择列表LigerComboBox中tree的节点初始化默认选中的问题
问题描述 用后台的Json传送tree的数据 前端用js方法来控制选中节点 此方法存在bug 实例: bug问题:无论设置的默认选中值是多少个,前台checkbox最多只显示选中一个,但是内容框中显示 ...
- GO_09:GO语言基础之reflect反射
反射reflection 1. 反射可以大大的提高程序的灵活性,使得 interface{} 有更大的发挥余地 2. 反射使用 TypeOf 和 ValueOf 函数从接口中获取目标对象信息 3. 反 ...
- windows10下基于vs2015的 caffe安装教程及python接口实现
啦啦啦:根据网上的教程前一天安装失败,第二天才安装成功.其实caffe的安装并不难,只是网上的教程不是很全面,自己写一个,留作纪念. 准备工作 Windows10 操作系统 vs2015(c++编译器 ...
- c# string 和 byte[]数组之间转换
在文件流读取和存储过程当中,经常涉及到byte[]数组形式存储数据,再此过程中也涉及到String类型字符串和byte[]的类型转换,下面我们举例说明一下. 现在有一个字符串: string str ...