LeetCode初级算法--设计问题02:最小栈
一、引子
这是由LeetCode官方推出的的经典面试题目清单~
这个模块对应的是探索的初级算法~旨在帮助入门算法。我们第一遍刷的是leetcode推荐的题目。
二、题目
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。
- push(x) -- 将元素 x 推入栈中。
- pop() -- 删除栈顶的元素。
- top() -- 获取栈顶元素。
- getMin() -- 检索栈中的最小元素。
示例:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.getMin(); --> 返回 -2.
1、思路
第一种方法:
用列表模拟栈,push、pop、top和getMin分别对应list.append()、list.pop()、list[-1]和min()操作
第二种方法:
引入minStack列表存放最小值
2、编程实现
第一种方法:
class MinStack(object):
def __init__(self):
"""
initialize your data structure here.
"""
self.l = []
def push(self, x):
"""
:type x: int
:rtype: None
"""
if x is None:
pass
else:
self.l.append(x)
def pop(self):
"""
:rtype: None
"""
if self.l is None:
return 'error'
else:
self.l.pop(-1)
def top(self):
"""
:rtype: int
"""
if self.l is None:
return 'error'
else:
return self.l[-1]
def getMin(self):
"""
:rtype: int
"""
if self.l is None:
return 'error'
else:
return min(self.l)
# Your MinStack object will be instantiated and called as such:
# obj = MinStack()
# obj.push(x)
# obj.pop()
# param_3 = obj.top()
# param_4 = obj.getMin()
第二种方法:
class MinStack(object):
def __init__(self):
"""
initialize your data structure here.
"""
self.stack = [] #存放所有元素
self.minStack = []#存放每一次压入数据时,栈中的最小值(如果压入数据的值大于栈中的最小值就不需要重复压入最小值,小于或者等于栈中最小值则需要压入)
def push(self, x):
"""
:type x: int
:rtype: void
"""
self.stack.append(x)
if not self.minStack or self.minStack[-1]>=x:
self.minStack.append(x)
def pop(self): #移除栈顶元素时,判断是否移除栈中最小值
"""
:rtype: void
"""
if self.minStack[-1]==self.stack[-1]:
del self.minStack[-1]
self.stack.pop()
def top(self):
"""
:rtype: int
"""
return self.stack[-1]
def getMin(self):
"""
:rtype: int
"""
return self.minStack[-1]
本文由博客一文多发平台 OpenWrite 发布!
审核编辑 黄昊宇
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
人工智能
+关注
关注
1787文章
46142浏览量
235556 -
机器学习
+关注
关注
66文章
8308浏览量
131937 -
深度学习
+关注
关注
73文章
5426浏览量
120646 -
leetcode
+关注
关注
0文章
20浏览量
2307
发布评论请先 登录
相关推荐
Linux网络协议栈的实现
网络协议栈是操作系统核心的一个重要组成部分,负责管理网络通信中的数据包处理。在 Linux 操作系统中,网络协议栈(Network Stack)负责实现 TCP/IP 协议簇,处理应用程序发起的网络
物联数据栈网关是什么?
物联数据栈网关就是物联网智能网关。 物联数据栈网关是物联网架构中的重要组件之一。它是连接物联网设备和云平台的中间设备,负责将物联网设备采集到的数据传输到云平台,并将云平台下发的指令传输给物联网设备
ethernetif_input和tcpip协议栈线程的作用
tcpip协议栈线程是lwIP协议栈的核心线程,负责处理TCP/IP协议栈的各种功能,包括TCP连接管理、IP数据报的路由和转发、以及UDP数据包的处理等。
初级线圈和次级线圈电流关系
在电磁学和电工学中,初级线圈和次级线圈是经常被用到的概念。初级线圈通常指的是提供电源的线圈,而次级线圈则指的是从初级线圈中导出的线圈。初级线圈和次级线圈之间存在一定的电流关系,本文将详
四路2输入NOR门74AHC02; 74AHCT02数据手册
电子发烧友网站提供《四路2输入NOR门74AHC02; 74AHCT02数据手册.pdf》资料免费下载
发表于 02-19 14:29
•0次下载
堆和栈的区别和使用注意事项
堆和栈是在计算机科学中广泛使用的两种数据结构,它们具有不同的用途和特点。堆和栈的区别涉及到内存分配、访问方式、数据存储等方面。在使用堆和栈时,还需要注意一些细节,以确保程序的正确性和效率。本文将详细
程序内存分区中的堆与栈
堆(Heap)与栈(Stack)是开发人员必须面对的两个概念,在理解这两个概念时,需要放到具体的场景下,因为不同场景下,堆与栈代表不同的含义。一般情况下,有两层含义: (1)程序内存布局场景下,堆
汽车UDS协议栈与XCP协议栈
UDS协议栈 汽车UDS协议栈是一种用于汽车电子控制单元(ECU)之间进行诊断和通信的标准协议。UDS(Unified Diagnostic Services)协议定义了一组诊断服务和通信机制,用于
CAN协议栈与LIN协议栈介绍
CAN协议栈 汽车CAN协议栈是一种软件组件,用于实现汽车电子系统中的CAN总线通信功能。它包含了一系列的功能软件,用于处理CAN总线的物理层和数据链路层的通信协议。 汽车CAN协议栈的功能软件主要
瑞f02 ADI
电子发烧友网为你提供ADI(ADI)瑞f02相关产品参数、数据手册,更有瑞f02的引脚图、接线图、封装手册、中文资料、英文资料,瑞f02真值表,瑞f02管脚等资料,希望可以帮助到广大的
发表于 10-11 19:10
两个栈实现一个队列方法
栈和队列是比较基础的数据结构。无论在工作中,还是在面试中,栈和队列都用的比较多。在计算机的世界,你会看到队列和栈,无处不在。 栈:一个先进后出的数据结构 队列:一个先进先出的数据结构
评论