【手把手带你刷Leetcode力扣】5.数据结构 - 栈

本文介绍了栈数据结构的特点,如先进后出,并通过两个具体的编程题目——有效的括号和下一个更大的元素——展示了栈在解决实际问题中的应用。在有效括号问题中,栈用于检查括号配对;在下一个更大的元素问题中,栈帮助找到数组中每个元素右侧的更大值。文章还提供了Python代码实现,并强调了时间复杂度和空间复杂度分析。
摘要由CSDN通过智能技术生成

栈:

先进后出

  • 浏览器的后退功能

时间复杂度

  • 访问Access — O(1) — 栈顶元素
  • 搜索Search — O(N)
  • 插入Insert — O(1)
  • 删除Delete — O(1) — 栈顶元素

常用操作

  1. 创建栈
    stack = []

  2. 添加元素
    stack.append()
    (添加的元素)
    O(1)

  3. 获取栈顶元素 — 即将出栈的元素
    stack[-1]

  4. 删除栈顶元素 — 即将出栈的元素
    temp = stack.pop()
    O(1)

  5. 栈的长度
    len(stack)
    O(1)

  6. 栈是否为空
    len(stack) == 0
    O(1)

  7. 遍历栈 — 边删除栈顶元素边遍历
    while len(stack) > 0:
    temp = queue.pop()
    print(temp)
    O(N)


练习题

  • 20 . 有效的括号
class Solution:
	# Stack
	# N is the size of s
	# Time Complexity: O(N)
	# Space Complexity: O(N)
	def isValid(self, s: str) -> bool:
		if len(s) == 0:
			return Ture
		stack = []
		for c in s:
			if c=='(' or c=='[' or c=='{':
				stack.append(c)
			else:
				if len(stack) == 0:
					return False
				else:
					temp = stack.pop()
					if c==')':
						if temp!='(':
							return False
					elif c==']':
						if temp!='[':
							return False
					elif c=='}':
						if temp!='{':
							return False
		return True if len(stack) == 0 else False
  • 496 . 下一个更大的元素
class Solution:
	# Stack
	# M is the size of num1, N is the size of nums2
	# Time Complexity: O(MN)
	# Space Complexity: O(N)
	def nextGreaterElement(self, nums1: List[int], nums2: List[int]) -> List[int]:
		res = []
		stack = []
		for num in nums2:
			stack.append(num)

		for num in nums1:
			temp = []
			isFound = False
			nextMax = -1
			while (len(stack) != 0 and not isFound):
				top = stack.pop()
				if top > num:
					nextMax = top
				elif top == num:
					isFound = True
				temp.append(top)
			res.append(nextMax)
			while len(temp) != 0:
				stack.append(temp.pop())

		return res

学习视频来源B站—爱学习的饲养员—手把手带你刷Leetcode力扣

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值