239. 滑动窗口最大值

2020-02-18  本文已影响0人  one_zheng

给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。

返回滑动窗口中的最大值。

示例:

image.png

提示:

你可以假设 k 总是有效的,在输入数组不为空的情况下,1 ≤ k ≤ 输入数组的大小。


func maxSlidingWindow(nums []int, k int) []int {
    if k <= 1 {
        return nums
    }

    queuelist := list.New()

    result := make([]int, len(nums)-k+1)
    // 初始化列表,列表中存在排序后的数据对应数组下标
    for i := 0; i < k; i++ {
        for queuelist.Back() != nil && nums[queuelist.Back().Value.(int)] < nums[i] {
            queuelist.Remove(queuelist.Back())
        }
        queuelist.PushBack(i)
    }
    a := queuelist.Front().Value.(int)
    result[0] = nums[a]

    for i := 1; i <= len(nums)-k; i++ {
        end := k - 1 + i
        for queuelist.Back() != nil && nums[queuelist.Back().Value.(int)] < nums[end] {
            queuelist.Remove(queuelist.Back())
        }
        queuelist.PushBack(end)

        for queuelist.Front() != nil && queuelist.Front().Value.(int) < i {
            queuelist.Remove(queuelist.Front())
        }
        result[i] = nums[queuelist.Front().Value.(int)]
    }
    return result
}

上一篇下一篇

猜你喜欢

热点阅读