题解 | #滑动窗口的最大值#
滑动窗口的最大值
http://www.nowcoder.com/practice/1624bc35a45c42c0bc17d17fa0cba788
package main
import ("fmt")
/**
*
* @param num int整型一维数组
* @param size int整型
* @return int整型一维数组
*/
func maxInWindows( num []int , size int ) []int {
res := make([]int, 0, len(num))
if size == 0 {
return res
}
if size > len(num) {
return res
}
maxNum := 0
maxNumIndex := 0
for i := 0 ;i < size; i++ {
if maxNum <= num[i] {
maxNum = num[i]
maxNumIndex= i
}
}
res = append(res , maxNum)
for i:=1; i < (len(num) - size +1); i++ {
// 如果向右移动的过程中,最大值跑出了窗口外,那么需要触发一次重新计算窗口
if i > maxNumIndex {
maxNum = 0
for j := i ;j < i+size-1; j++ {
if maxNum <= num[j] {
maxNum = num[j]
maxNumIndex= j
}
}
}
if num[i+size-1] >= maxNum {
maxNum = num[i+size-1]
maxNumIndex= i+size-1
}
res =append(res, maxNum)
}
return res
}
func max(a , b int) int {
if a > b {
return a
}
return b
}