这是一道 「困难」
题目来自:https://leetcode.cn/problems/sliding-window-maximum/

题目

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

返回 「滑动窗口中的最大值」

示例 1:

func maxSlidingWindow(nums []int, k int) []int {

    n := len(nums)
    deque := []int{}
    ans := make([]int0, n - k + 1)

    for i, num := range nums {
        // 将出界的下标删除
        if i >= k && deque[0] <= i - k {
            deque = deque[1:]
        }

        // 将 i 添加到队列,并保证队列是递减的。
        for len(deque) > 0 && nums[deque[len(deque) - 1]] <= num {
            deque = deque[:len(deque) - 1]
        }
        deque = append(deque, i)

        if i >= k - 1 {
            ans = append(ans, nums[deque[0]])
        }

    }

    return ans

}

复杂度分析

时间复杂度:,循环 n 次。

空间复杂度:,队列中最多存放 k 个元素,计算复杂度时忽略了返回值 ans

END




本篇文章来源于微信公众号: i余数



微信扫描下方的二维码阅读本文

此作者没有提供个人介绍
最后更新于 2023-06-19