滑动窗口最大值leetcode & nowcoder(python)

Posted Assange

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了滑动窗口最大值leetcode & nowcoder(python)相关的知识,希望对你有一定的参考价值。

 

方法一:暴力   时间O(nk)

1 class Solution:
2     def maxInWindows(self, num, size):
3         # write code here
4         if len(num)*size == 0:
5             return []
6         res=[]
7         for i in range(len(num)-size+1):
8             res.append(max(num[i:i+size]))
9         return res

方法二:双端队列

双端队列保存当前窗口的最大值

 1 from collections import deque
 2 class Solution:
 3     def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
 4         # base cases
 5         n = len(nums)
 6         if n * k == 0:
 7             return []
 8         if k == 1:
 9             return nums
10         
11         def clean_deque(i):
12             # remove indexes of elements not from sliding window
13             if deq and deq[0] == i - k:
14                 deq.popleft()
15                 
16             # remove from deq indexes of all elements 
17             # which are smaller than current element nums[i]
18             while deq and nums[i] > nums[deq[-1]]:
19                 deq.pop()
20         
21         # init deque and output
22         deq = deque()
23         max_idx = 0
24         for i in range(k):
25             clean_deque(i)
26             deq.append(i)
27             # compute max in nums[:k]
28             if nums[i] > nums[max_idx]:
29                 max_idx = i
30         output = [nums[max_idx]]
31         
32         # build output
33         for i in range(k, n):
34             clean_deque(i)          
35             deq.append(i)
36             output.append(nums[deq[0]])
37         return output

复杂度分析

时间复杂度:O(N),每个元素被处理两次- 其索引被添加到双向队列中和被双向队列删除。

空间复杂度:O(N),输出数组使用了O(N−k+1) 空间,双向队列使用了O(k)。

2020-01-08 20:53:02

以上是关于滑动窗口最大值leetcode & nowcoder(python)的主要内容,如果未能解决你的问题,请参考以下文章

leetcode 239. 滑动窗口最大值解题报告

Leetcode 239. 滑动窗口最大值

leetcode 643. 子数组最大平均数 I ------滑动窗口篇六,前缀和篇二

LeetCode-滑动窗口滑动窗口最大值

java LeetCode - 滑动窗口maxmum滑动窗口最大值

leetcode 239. 滑动窗口最大值