这是一道 「困难」 题
题目来自: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([]int, 0, 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余数
微信扫描下方的二维码阅读本文

Comments NOTHING