美文网首页
239. 滑动窗口最大值

239. 滑动窗口最大值

作者: one_zheng | 来源:发表于2020-02-18 21:58 被阅读0次

    给定一个数组 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
    }
    
    

    相关文章

      网友评论

          本文标题:239. 滑动窗口最大值

          本文链接:https://www.haomeiwen.com/subject/scgnfhtx.html