面试之手撕代码二
2020-03-09 23:43
267 查看
(二)
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。
push(x) – 将元素 x 推入栈中。
pop() – 删除栈顶的元素。
top() – 获取栈顶元素。
getMin() – 检索栈中的最小元素。
解法:关键是如何在常数时间做到,解法为双栈(空间换时间),一个存数据,一个存最小值,push的同时,也在第二个栈push最小值(或者push的时候只比较当前值与最小栈的栈顶,不更大push,pop的同时判断是否与第二个栈顶相同,同则pop)。
Python版(第一种解法):
class MinStack(object): def __init__(self): """ initialize your data structure here. """ self.result = [] self.min = [] def push(self, x): """ :type x: int :rtype: None """ self.result.append(x) if len(self.min) == 0: self.min.append(x) else: if x < self.min[-1]: self.min.append(x) else: self.min.append(self.min[-1]) def pop(self): """ :rtype: None """ self.min.pop() return self.result.pop() def top(self): """ :rtype: int """ return self.result[-1] def getMin(self): """ :rtype: int """ if len(self.min) == 0: return [] return self.min[-1]
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 【面试必备】手撕代码,你怕不怕?
- 面试过程中手撕代码之二叉树
- 面试中常见的数组的操作:遍历,最值,反转,冒泡排序,二分查找(附代码)
- 关于截取字符串的java笔试(面试)题简化代码实现
- 面试代码基础(一)从strstr说起
- 如何在面试时写出高质量的代码(转)
- Java 面试代码题型
- 代码面试最常用的10大算法
- 代码面试最常用的十大算法
- 解一道面试题——华为社招现场面试1:请使用代码计算1234567891011121314151617181920*2019181716151413121110987654321 。
- java面试一些写代码的题目
- 10个经典的C语言面试基础算法及代码
- 10个经典的C语言面试基础算法及代码
- 设计一个有getMin功能的栈 程序员代码面试指南
- 面试常用代码
- 经典面试编程题--atoi()函数的实现(就是模拟手算,核心代码就一句total = 10 * total + (c - '0'); 但是要注意正负号、溢出等问题)
- 10个经典的C语言面试基础算法及代码
- 面试代码
- Java核心技术及面试指南的视频讲解和代码下载位置
- 程序员代码面试指南--由两个栈组成的队列