leetcode 155 Min Stack
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.
解决方案:
可以看到STL的解决方案跟大多数的c语言解决方案还是有差距的,后序我找一找基于链表的整齐点的c语言实现
The key idea is use a another stack to store the minimum value of the corresponding stack. Put differently, min[i] equals the minimum element where data[i] is the top of this sub-stack.
We can use a full size of min where it’s size equals the data’s, but it’s not necessary.
I have 2 main concerns about the algorithm:
1 We should pop the element in min IFF there’s match of data.top().
2 If we have multiple minima, for example [0, 1, 0] in data, then the min should be [0, 0]. Otherwise, the the pop operation wouldn’t work properly. As a result, we should push the element if x <= min.top().
class MinStack {
public:
void push(int x) {
s.push(x);
if (mins.empty() || x<=mins.top()) {
mins.push(x);
}
}
void pop() {
int temp = s.top();
s.pop();
if (temp == mins.top()) {
mins.pop();
}
}
int top() {
return s.top();
}
int getMin() {
return mins.top();
}
private:
stack<int> s;
stack<int> mins;
};
STL list实现:
class MinStack {
private:
list<int> s;
int min;
public:
MinStack()
{
min=INT_MAX;
}
void push(int x) {
if(x<min) min=x;
s.push_back(x);
}
void pop() {
if(s.back()==min)
{
s.pop_back();
min=INT_MAX;
list<int>::iterator it=s.begin();
while(it!=s.end())
{
if(*it<min) min=*it;
it++;
}
}else
s.pop_back();
}
int top() {
return s.back();
}
int getMin() {
return min;
}
};
python解决方案:
class MinStack:
# @param x, an integer
def __init__(self):
# the stack it self
self.A = []
self.minS=[]
# @return an integer
def push(self, x):
n=len(self.A)
if n==0:
self.minS.append(x)
else:
lastmin=self.minS[-1]
if x<=lastmin:
self.minS.append(x)
self.A.append(x)
# @return nothing
def pop(self):
if len(self.A)>0 and self.A.pop()==self.minS[-1]:
self.minS.pop()
# @return an integer
def top(self):
return self.A[-1]
# @return an integer
def getMin(self):
return self.minS[-1]
python解决方案2:
class MinStack:
def __init__(self):
self.q = []
# @param x, an integer
# @return an integer
def push(self, x):
curMin = self.getMin()
if curMin == None or x < curMin:
curMin = x
self.q.append((x, curMin));
# @return nothing
def pop(self):
self.q.pop()
# @return an integer
def top(self):
if len(self.q) == 0:
return None
else:
return self.q[len(self.q) - 1][0]
# @return an integer
def getMin(self):
if len(self.q) == 0:
return None
else:
return self.q[len(self.q) - 1][1]
asked Apr 14 in Min Stack by charles8135 (180 points)
- SDP(11):MongoDB-Engine功能实现
- SDP(10):文本式大数据运算环境-MongoDB-Engine功能设计
- Kaggle Titanic 生存预测比赛超完整笔记(下)
- SDP(9):MongoDB-Scala - data access and modeling
- 数据清理的遗留问题处理(r6笔记第87天)
- 一次DB time抖动发现的expdp的bug(r6笔记第86天)
- Python中map函数
- 10g,11g中数据库静默安装中的细小差别(r6笔记第85天)
- SDP(8):文本式数据库-MongoDB-Scala基本操作
- SDP(7):Cassandra- Cassandra-Engine:Streaming
- TensorFlow实现神经网络入门篇
- 27.反射,类加载器,设计模式,jdk新特性
- SDP(6):分布式数据库运算环境- Cassandra-Engine
- 配置dg broker的问题分析及修复(r6笔记第84天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python使用OpenPyXL处理Excel表格
- php如何比较两个浮点数是否相等详解
- keras 回调函数Callbacks 断点ModelCheckpoint教程
- Mac下快速搭建PHP开发环境步骤详解
- PHP常用工具函数小结【移除XSS攻击、UTF8与GBK编码转换等】
- Ajax+PHP实现的模拟进度条功能示例
- python实例化对象的具体方法
- PHP5.6.8连接SQL Server 2008 R2数据库常用技巧分析总结
- YII框架关联查询操作示例
- Keras之fit_generator与train_on_batch用法
- django美化后台django-suit的安装配置操作
- python读取excel进行遍历/xlrd模块操作
- 浅谈Keras的Sequential与PyTorch的Sequential的区别
- python 制作python包,封装成可用模块教程
- 使用python脚本自动生成K8S-YAML的方法示例