面试题30:包含min函数的栈

思路:
1.首先将栈的基本结构写出
#初始化栈的写法
def __init__(self):
self.stack = [] #栈的压入 (加self是实例化,如果前面加入静态装饰器啥的,就不需要加入self)
def push(self,node):
self.stack.append(node) #栈的弹出
def pop(self):
#pop需要return
if self.stack:
return self.stack.pop()
return None #栈顶元素 def top(self):
return self.stack[-1]
2. 需要用空间换时间,来构造一个辅助栈(与原栈长度相同)存放小的元素;当然我程序中采用的是第二种思路,辅助栈的长度不一定等于原栈,这个时候需要在弹出是判断是否弹出

每次压入栈的一个元素,就记录一个当前的最小元素
每次弹出栈的一个元素,就连带着辅助栈的元素一起弹出
实现以上思路:
# -*- coding:utf-8 -*-
class Solution:
#为了时间复杂度为O(n)的指标,需要牺牲空间复杂度,我们建立一个栈(和原来栈长度一致)来做辅助存储最小元素
def __init__(self):
self.stack = []
self.minStack = [] def push(self, node):
# write code here
self.stack.append(node)
if self.minStack:
if self.minStack[-1] > node:
self.minStack.append(node)
else:
self.minStack.append(self.minStack[-1])
else:
self.minStack.append(node) def pop(self):
# write code here
if self.stack:
self.minStack.pop()
return self.stack.pop()
return None def top(self):
# write code here
if self.stack:
return self.stack[-1]
return None def min(self):
# write code here
if self.minStack:
return self.minStack[-1]
return None
我们还可以对上面的思路变形,也就是构造辅助栈时,辅助栈只存储当前最小元素,长度<=原来栈的长度,也就是上面的4只存储一遍
# -*- coding:utf-8 -*-
class Solution:
# 首先将栈的基本功能实现
def __init__(self):
self.stackA = []
self.minStack = []
def push(self, node):
# write code here
self.stackA.append(node)
if self.minStack:
if self.minStack[-1] > node:
self.minStack.append(node)
else:
self.minStack.append(node)
def pop(self):
# write code here
if self.stackA:
if self.stackA[-1] == self.minStack[-1]:
self.minStack.pop()
return self.stackA.pop()
return None
def top(self):
# write code here
if self.stackA:
return self.stackA[-1]
return None
def min(self):
# write code here
if self.minStack == []:
return None
return self.minStack[-1]
面试题30:包含min函数的栈的更多相关文章
- 剑指offer面试题30.包含min函数的栈
一开始写的垃圾代码,push和pop都是O(N) class Solution { public: vector<int> vec; int min_val=INT_MAX,min_cnt ...
- 剑指Offer:面试题21——包含min函数的栈(java实现)
问题描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数.在该栈中,调用min,push及pop的时间复杂度都是O(1). 思路:加入一个辅助栈用来存储最小值集合 (这里要注 ...
- 剑指Offer - 九度1522 - 包含min函数的栈
剑指Offer - 九度1522 - 包含min函数的栈2013-12-01 23:44 题目描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 输入: 输入可能包含多个测 ...
- 剑指offer(20)包含min函数的栈
题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 题目分析 首先一开始我们分析得到最小值肯定要比较嘛,和栈里面的数据一一比较,但是栈这种数据结构,你又只能和栈顶弹出来的 ...
- 剑指offer二十之包含min函数的栈
一.题目 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 二.思路 用一个栈dataStack保存数据,用另外一个栈minStack保存依次入栈最小的数.每次元素存入minSt ...
- 【剑指Offer】20、包含min函数的栈
题目描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 解题思路: 使用两个stack,一个为数据栈,另一个为辅助栈.数据栈 ...
- 《剑指offer》面试题30. 包含min函数的栈
问题描述 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.push 及 pop 的时间复杂度都是 O(1). 示例: MinStack minSt ...
- 剑指 Offer 30. 包含min函数的栈 + 双栈实现求解栈中的最小值
剑指 Offer 30. 包含min函数的栈 Offer_30 题目描述: 题解分析: 题目其实考察的是栈的知识,本题的目的是使用两个栈来求解最小值. 第二个栈主要用来维护第一个栈中的最小值,所以它里 ...
- 剑指 Offer 30. 包含min函数的栈
剑指 Offer 30. 包含min函数的栈 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.push 及 pop 的时间复杂度都是 O(1). 示例 ...
- 力扣 - 剑指 Offer 30. 包含min函数的栈
题目 剑指 Offer 30. 包含min函数的栈 思路1 使用一个辅助栈min_stack,用来维护栈的最小的元素 每次添加元素入栈时候,data_stack和min_stack都要同时维护 dat ...
随机推荐
- [Codeforces 280D]k-Maximum Subsequence Sum(线段树)
[Codeforces 280D]k-Maximum Subsequence Sum(线段树) 题面 给出一个序列,序列里面的数有正有负,有两种操作 1.单点修改 2.区间查询,在区间中选出至多k个不 ...
- [暑假集训Day3T1]小木棍
经典搜索题. 考虑以下9种优化 1)按木棍长度排序,使得较大长度的木棍被较早的选出. 2)只找能够整除的木棍长度,因为不能被sum整除一定不会出整数根,自然也就不是最优解. 3)枚举木棍长度时只需从最 ...
- ADC(简易的DMA传输)的认识
ADC(简易的DMA传输)的认识 首先看到是ADC的特性 1.ADC的12位分辨率.不能直接测量负电压,然后是最小量程化单位是LSB=Vref+/212 2.单次和转换模式的使用 3. 从通道0到通道 ...
- JS :Date日期格式化
Date.prototype.format = function (formatStr) { var date = this; /* 函数:填充0字符 参数:value-需要填充的字符串, lengt ...
- 道路识别demo
最近做的道路识别一开始终于弄懂了点东西,一开始在网上找到了一个简单的道路识别的opencvsharp的版本.我觉得opencvsharp真的是一个很好的东西,它封装了比opencv更多的数据结构和库, ...
- Freeswitch Tutorial
I. Install Freeswitch 1) FreeSWITCH Explained https://freeswitch.org/confluence/ https://freeswitch. ...
- rabbitmq windows安装 及 centos安装
windows安装如下: 安装方法如下网址: https://baijiahao.baidu.com/s?id=1605656085633071281&wfr=spider&for= ...
- 金蝶KIS客户端修改IP连接服务器的方法
问题现象:服务器IP变更后,金蝶KIS客户端打开时提示多个错误,并会自动关闭,无法联网登录 1. 到下面位置修改注册表 Windows Registry Editor Version 5.00 [HK ...
- Codeforces Round #394 (Div. 2) - C
题目链接:http://codeforces.com/contest/761/problem/C 题意:给定n个长度为m的字符串.每个字符串(字符串下标从0到m-1)都有一个指针,初始指针指向第0个位 ...
- MySQL系列之二四种隔离级别及加锁
事务 1.定义:所有操作必须成功完成,否则在每个操作中所作的所有更改都会备撤销. 2.事务的ACID 原子性atomicity 一致性consistency 隔离性isolation 持续 ...