(第19天)【leetcode题解】栈与队列基础与题型总结

栈基础

  • 栈的特性:先入后出、不提供访问元素的功能
  • 栈的底层容器可以是数组和链表,默认底层容器为deque双端队列
  • 栈的实现在底层容器的基础上提供一些接口:push()、pop()、empty()等

栈题目

  1. 用栈实现队列:用栈的功能实现队列的基本操作。
  2. 有效的括号:用栈实现括号匹配问题,这也是编译器在词法分析中处理各种括号的逻辑。在编写代码之前应先分析出几种不匹配的情况。
  3. 删除字符串中的所有相邻重复项 :两个相同字符相邻就删除,这也是游戏对对碰中如果相同的元素挨在一起就要消除的逻辑。
  4. 逆波兰表达式求值:了解后缀运算,模拟计算机进行算数运算的方式。

队列

队列基础

  • 队列的特性:先入先出、不提供访问元素的功能
  • 队列的底层容器可以是数组和链表,默认底层容器为deque双端队列
  • 队列的实现底层容器的基础上提供一些接口:push()、pop()、empty()等

队列题目

  1. 用队列实现栈:用队列的功能实现栈的基本功能。
  2. 滑动窗口最大值:以deque为底层设计一个单调队列,可以把入队元素从大到小排列,可以跟随滑动窗口的移动而加入弹出元素。而且在加入元素时,只加入有可能成为滑动窗口中最大值的元素,这与单调队列的push()行为有关。
  3. 前K个高频元素:使用map进行频率统计,使用优先级队列(底层实现通常为堆Heap)对统计结果进行排序。

总结

  • 栈与队列底层实现通常为数组或链表。
  • 栈多用于解决相应元素匹配、后缀运算等问题。
  • 队列多用于解决动态数据流中求最值、对元素排序等问题。
  • 队列中的单调队列和优先级队列是特殊场景下解决问题的利器,要熟悉其特性,活学活用它们的某些行为,例如push()等。
  • 在不同场景下选择合适的数据结构,可以使解决问题变得简单和高效。
  • 16
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值