核心内容摘要
STM32嵌入式热成像系统设计与MLX90640实战调优
力扣题目链接
滑动窗口最大值 - 力扣LeetCode题目描述给你一个整数数组nums有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。
你只可以看到在滑动窗口内的k个数字。
滑动窗口每次只向右移动一位。
返回滑动窗口中的最大值。
示例 1输入nums [1,3,-1,-3,5,3,6,7], k 3输出[3,3,5,5,6,7]解释滑动窗口的位置 最大值 --------------- ----- [1 3 -1] -3 5 3 6 731 [3 -1 -3] 5 3 6 731 3 [-1 -3 5] 3 6 751 3 -1 [-3 5 3] 6 751 3 -1 -3 [5 3 6] 761 3 -1 -3 5 [3 6 7]7这道题很适合用单调队列来写这样外面很容易通过一侧的值就知道最大值了。
什么是单调队列其实就是单调递增或单调递减队列。
那么就用单调递减队列来设计吧。
单调递减队列是左边队列出口处的值最大所以窗口最大值就是索引0处通过队列的pop和push函数来设计吧。
最开始的滑动窗口值只能用push函数通过它让我们的队列成单调递减那么我们先设计push函数。
例单减数列 出口处 9 8 7 4 入口处当要进来的元素比入口处元素大时进来后就不成单减队列了所以要先比较把比他大的元素都弹出然后再将该元素加入队列再设计pop函数由刚才的push函数设计就知道队列里面的元素个数不一定等于滑动窗口里的元素个数。
所以队列的元素个数一定小于等于滑动窗口元素个数。
那么我们就不用每次pop都一定弹出元素。
所以我们要弹出的元素等于出口处元素时才需要弹出元素。
现在就设计完成了单调队列之后就很容易了完整代码func MaxSlidingWindow(nums []int, k int) []int { myque : make(queue,