题解 | #滑动窗口的最大值#
滑动窗口的最大值
https://www.nowcoder.com/practice/1624bc35a45c42c0bc17d17fa0cba788
func maxInWindows( num []int , size int ) []int {
// write code here
// ans := []int{}
//暴力
// for l:=0; l<len(num)-size+1 ; l++{
// r := l+size-1
// max_ := -1
// for i:=l;i<=r;i++{
// max_ = max(max_, num[i])
// }
// if max_ != -1{
// ans = append(ans, max_)
// }
// }
// return ans
//单调队列
res := make([]int, 0, len(num)-size+1)
dq := []int{}
for i:= 0;i<len(num);i++{
fmt.Println(dq)
for len(dq)>0 && num[i] > dq[len(dq)-1]{ //使dq保持单调
dq = dq[:len(dq)-1]
}
dq = append(dq, num[i])
if i>=size{
if num[i-size] == dq[0]{//滑动窗口 移除队头元素
dq = dq[1:]
}
}
if i>=size-1{ //开始统计结果
res = append(res, dq[0])
}
}
return res
}