代码随想录-栈与队列

栈与队列

这几天把代码随想录中栈与队列部分的题做完了,在这里梳理总结一下。

用栈实现队列

可以用两个栈来实现队列,一个栈用来入栈,一个栈用来出栈。实现push()函数的时候,就直接把元素加入输入栈中。实现pop()函数的时候,需要检查输出栈,如果输出栈为空,就把输入栈中元素全部放入输出栈中,然后输出栈.pop()。实现peek()函数和实现pop()函数原理一样。

用队列实现栈

用两个队列实现栈,只要保证元素是先入后出的就可以,只需要把push()函数好好设计一下就可以。当加入一个元素的时候,先把元素放入队列2中,然后把队列1中的元素全部放入队列2中,最后队列1和队列2进行交换。

有效的括号

这个括号匹配问题适合用栈的数据结构来解决。遇到左括号就入栈,遇到右括号就查看栈顶元素看是否与其匹配。

删除字符串中的所有相邻重复项

这个问题可以用栈解决。把字符串中的字符给压入栈,压入的字符和栈顶元素一样的话就都弹出。最后把栈中元素全部弹出,再反转,就是最后的答案了。

逆波兰表达式求值

同样,这个问题也是用栈来解决。遇到数字就入栈,遇到运算符就弹出栈顶的两个元素进行运算,并把结果压入栈。

滑动窗口最大值

这个题目可以用自定义的单调递减队列来解决。单调递减队列每次调用peek()函数,可以输出队列元素的最大值。add()函数的实现逻辑就是,把加入的值和队尾元素比较,如果加入的元素值比队尾元素值大,就弹出队尾元素的值,直至加入的元素值小于等于队尾元素的值。poll()函数的实现逻辑就是,如果弹出元素的值等于队头元素的值,那么就弹出;否则,则不做任何操作。这样就可以利用自定义的单调递减队列求滑动窗口的最大值。

前K个高频元素

首先通过Map对数组中整数出现的频数进行统计,然后通过把频数加入优先级队列进行排序,输出频数最大的前k个元素即可。优先级队列是一个队列外衣的堆。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值