|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 Seawolf 于 2020-7-30 11:46 编辑
- Given an array nums, there is a sliding window of size k which is moving from the very left of the array to the very right. You can only see the k numbers in the window. Each time the sliding window moves right by one position. Return the max sliding window.
- Follow up:
- Could you solve it in linear time?
- Example:
- Input: nums = [1,3,-1,-3,5,3,6,7], and k = 3
- Output: [3,3,5,5,6,7]
- Explanation:
- Window position Max
- --------------- -----
- [1 3 -1] -3 5 3 6 7 3
- 1 [3 -1 -3] 5 3 6 7 3
- 1 3 [-1 -3 5] 3 6 7 5
- 1 3 -1 [-3 5 3] 6 7 5
- 1 3 -1 -3 [5 3 6] 7 6
- 1 3 -1 -3 5 [3 6 7] 7
-
- Constraints:
- 1 <= nums.length <= 10^5
- -10^4 <= nums[i] <= 10^4
- 1 <= k <= nums.length
复制代码
- 给定一个数组 nums,有一个大小为k;的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k个数字。滑动窗口每次只向右移动一位。
- 返回滑动窗口中的最大值。
- 进阶:
- 你能在线性时间复杂度内解决此题吗?
- 示例:
- 输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3
- 输出: [3,3,5,5,6,7]
- 解释:
- 滑动窗口的位置 最大值
- --------------- -----
- [1 3 -1] -3 5 3 6 7 3
- 1 [3 -1 -3] 5 3 6 7 3
- 1 3 [-1 -3 5] 3 6 7 5
- 1 3 -1 [-3 5 3] 6 7 5
- 1 3 -1 -3 [5 3 6] 7 6
- 1 3 -1 -3 5 [3 6 7] 7
- 提示:
- 1 <= nums.length <= 10^5
- -10^4<= nums[i]<= 10^4
- 1 <= k<= nums.length
复制代码
- from collections import deque
- class Solution:
- def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
- queue = deque()
- res = []
- if len(nums) == 0:
- return res
- for i in range(k - 1):
- self.indeque(queue, nums[i])
- for i in range(k - 1, len(nums)):
- self.indeque(queue, nums[i])
- res.append(queue[0])
- self.outdeque(queue, nums[i - k + 1])
- return res
-
- def indeque(self, queue: List[int], num: int) -> None:
- while len(queue) != 0 and queue[-1] < num:
- queue.pop()
- queue.append(num)
-
- def outdeque(self, queue: List[int], num: int) -> None:
- if queue[0] == num:
- queue.popleft()
复制代码 |
|