【每日一题】3月30日题目精讲 单调队列

题号 NC50528
名称 滑动窗口

滑动窗口取最值问题是一个非常经典的问题,当然你可使用线段树树状数组ST表等等方法去求,我在这里呢给大家介绍一种时间复杂度,简单实在将来也有很多地方能用的方法——单调队列。

以求最大值为例:

区间的最大值为:

区间右移到后最大值为:

我们可以看到这两段区别仅仅在 上,扫一遍显然是很没必要的。而如果 ,那么当进入了窗口中,就不可能作为最大值存在了,如果我们记录当前区间中现在或者将来有机会成为最大值的数,那么就可以从这个记录中删掉了。如果, 当出了区间,还是有机会的,所有需要留着。


我们用一个双端队列来维护(普通的队列只能从队尾加入元素从队首删除元素,双端队列的队尾也可也删除元素),区间每次右移一个单位,首先看看队首的元素是否超出了范围,如果超出了,就把它删掉;然后将新进入区间的这个元素往双端队列里放,但放进来之前需要判断队尾(也就是还有可能成为最大值的最后一个元素)是不是小于他小于他,如果是,就把这个队尾删掉,一直到前一个元素大于等于它为止。由于我们队列里面的元素实际上是单调不增的,每次的最大实际上就在队首。而由于每个数进队和出队的次数都只有一次,时间复杂度是的。

标程是手工用数组模拟的双端队列,你也可以使用stl里的deque容器。

看完邓老师的题解,记得自己去做题提高呀~
欢迎各位大佬来做题写题解,也欢迎大家踊跃在本讨论贴中提问!

活动奖励:

在牛客博客中写出题解,并回复地址
审核通过可获得10-50牛币(依据题目难度和题解的内容而定)

本道题目4月6日中午12:00之前写的题解有获得牛币资格~

牛客博客开通方式

  1. 如何开通牛客博客:https://www.nowcoder.com/discuss/202952
  2. 如何使用博客搬家功能:进入博客--->设置--->底部博客搬家
  3. 如果你对牛客博客有任何意见或建议:牛客博客意见反馈专贴
全部评论
如何判断队首元素超出区间范围
1 回复 分享
发布于 2020-03-30 14:19
https://blog.nowcoder.net/n/790eb8582b494c0dbe12ed1795482c3a
1 回复 分享
发布于 2020-05-02 22:52
https://blog.nowcoder.net/n/6421a5fe473e4dac923a696333ce7225
点赞 回复 分享
发布于 2020-03-29 11:01
https://blog.nowcoder.net/n/d0bb67a0cec64f878db7139bc25d55f3
点赞 回复 分享
发布于 2020-03-29 11:24
https://blog.nowcoder.net/n/299d4a8a154847f0a9d76273102ab1a8
点赞 回复 分享
发布于 2020-03-29 11:42
https://blog.nowcoder.net/n/346b78cd23ea4667b9a47ad769f58d7a
点赞 回复 分享
发布于 2020-03-29 11:55
https://blog.nowcoder.net/n/dd77ea4f335e4876907efd5cc922f38a
点赞 回复 分享
发布于 2020-03-29 12:28
https://blog.nowcoder.net/n/1f85f974d1c148bcb82b7a3a43d7ee6c
点赞 回复 分享
发布于 2020-03-29 12:58
https://blog.nowcoder.net/n/41acd8472492411593fb79ac569153e2
点赞 回复 分享
发布于 2020-03-29 13:08
https://blog.nowcoder.net/n/80690e960aee4cee8b8cee30bc832cee
点赞 回复 分享
发布于 2020-03-29 13:10
https://blog.nowcoder.net/n/8b3d529c792744349efdf5b64cc1845d
点赞 回复 分享
发布于 2020-03-29 13:23
https://blog.nowcoder.net/n/b21d62e987af4a5c9e6470125d2c03c3
点赞 回复 分享
发布于 2020-03-29 13:39
https://blog.nowcoder.net/n/08c0c916b2164657937e6b9da817097f
点赞 回复 分享
发布于 2020-03-29 13:44
https://blog.nowcoder.net/n/b51fbce1b5704f9182908127354feb8a
点赞 回复 分享
发布于 2020-03-29 14:08
空间给得好小啊想用其他做法好像都不行 最终还是妥协了 https://blog.nowcoder.net/n/980d2d402b9147a9b86569a95e3a940b
点赞 回复 分享
发布于 2020-03-29 15:37
https://blog.nowcoder.net/n/7ba5def5ed6249f5a9714a4adf016d76
点赞 回复 分享
发布于 2020-03-29 15:45
https://blog.nowcoder.net/n/193e9c7014e94447a67257d1879167ec
点赞 回复 分享
发布于 2020-03-29 15:50
https://blog.nowcoder.net/n/f1036a47c5134ab8a17cb251e53922c3
点赞 回复 分享
发布于 2020-03-29 16:34
https://blog.nowcoder.net/n/f09b29a756ee4a1aa88a33f08c220f08
点赞 回复 分享
发布于 2020-03-29 16:43
https://blog.nowcoder.net/n/289ddd0d20e543f18d3c4c45b9432175
点赞 回复 分享
发布于 2020-03-29 19:25

相关推荐

10-28 11:04
已编辑
美团_后端实习生(实习员工)
一个2人:我说几个点吧,你的实习经历写的让人觉得毫无含金量,你没有挖掘你需求里的 亮点, 让人觉得你不仅打杂还摆烂。然后你的简历太长了🤣你这个实习经历看完,估计没几个人愿意接着看下去, sdk, 索引这种东西单拎出来说太顶真了兄弟,好好优化下简历吧
点赞 评论 收藏
分享
11-18 09:44
Java
小白也想要offer:简历别放洋屁,搞不还还放错了,当然你投外企除外,以上纯属个人观点
点赞 评论 收藏
分享
评论
5
3
分享
牛客网
牛客企业服务