Golang | Leetcode Golang题解之第239题滑动窗口最大值-题解:

时间:2024-07-17 07:14:54
func maxSlidingWindow(nums []int, k int) []int {
    n := len(nums)
    prefixMax := make([]int, n)
    suffixMax := make([]int, n)
    for i, v := range nums {
        if i%k == 0 {
            prefixMax[i] = v
        } else {
            prefixMax[i] = max(prefixMax[i-1], v)
        }
    }
    for i := n - 1; i >= 0; i-- {
        if i == n-1 || (i+1)%k == 0 {
            suffixMax[i] = nums[i]
        } else {
            suffixMax[i] = max(suffixMax[i+1], nums[i])
        }
    }

    ans := make([]int, n-k+1)
    for i := range ans {
        ans[i] = max(suffixMax[i], prefixMax[i+k-1])
    }
    return ans
}

func max(a, b int) int {
    if a > b {
        return a
    }
    return b
}