题目大意
https://leetcode.com/problems/sliding-window-maximum/
给你一个数组nums和窗口大小k,窗口最开始左边界位于0的位置,之后每次右移一位,输出每个窗口内元素的最大值。
题目分析
暴力方法O(n*k)
可解,如果利用堆可以O(n * logk)
,但题目要求了复杂度是O(n)
,也就是和k无关的,我参考了discuss区的这篇解法:https://discuss.leetcode.com/topic/19067/clean-c-o-n-solution-using-a-deque 思路还是比较容易理解,利用双端队列(模拟窗口)维护一个递减序列,序列的头部就是窗口最大值,当然要注意如果元素个数超出窗口大小k,就要移除头部元素。
代码
|
|