题目
给定一个整数数组 nums 和一个正整数 k,滑动一个大小为 k 的窗口,从数组的左边到右边,找到每个窗口中的最大值。
示例 1:
输入:nums = {1, 3, -1, -3, 5, 3, 6, 7} 、k = 3
输出:3 3 5 5 6 7文章来源:https://www.toymoban.com/news/detail-522591.html
思路
我们可以使用双端队列(deque)来解决这个问题。双端队列可以在两端进行插入和删除操作,并且可以快速获取队列中的最大值。
我们使用一个双端队列来存储数组元素的索引,并且保证队列中的索引对应的数组元素是按照从大到小的顺序排列的。这样,队列的第一个元素就是当前窗口中的最大值。
我们遍历数组中的每个元素,并进行以下操作:
1、首先,我们需要判断队列中的第一个索引是否已经超出了当前窗口的范围,如果超出了范围,则将其从队列中删除。
2、然后,我们需要将当前元素与队列中的元素进行比较。如果当前元素大于队列中的元素,则将队列中的元素逐个删除,直到当前元素小于等于队列中的元素,或者队列为空。
3、将当前元素的索引加入队文章来源地址https://www.toymoban.com/news/detail-522591.html
到了这里,关于生成窗口最大值数组【中等难度】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!