题解 | #滑动窗口的最大值#
滑动窗口的最大值
https://www.nowcoder.com/practice/1624bc35a45c42c0bc17d17fa0cba788
package main /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @param size int整型 * @return int整型一维数组 */ func maxInWindows( nums []int , size int ) []int { // write code here if size > len(nums) || size == 0 { return nil } var result []int // 维护一个单调递减队列 var deque []int for index,value := range nums { // 当发现当前值 比队列尾部的数据还要大的时候,移除队列尾部的数据,直到找到一个 // 通过此来维护一个单调递减队列 for len(deque) > 0 && nums[deque[len(deque)-1]] <= value { deque = deque[:len(deque)-1] } // 将当前元素索引加入到deque中 deque = append(deque, index) // 当deque的第一个元素索引超出当前窗口范围时,将其从deque中移除 if deque[0] <= index - size { deque = deque[1:] } // 当i+1>=k时,窗口形成,将当前窗口的最大值加入到result中 if index+1 >= size { result = append(result, nums[deque[0]]) } } return result }