leetcode239

 1 class Solution:
 2     def maxSlidingWindow(self, nums: 'List[int]', k: int) -> 'List[int]':
 3         n = len(nums)
 4         if n==0:
 5             return []
 6         if k==0:
 7             return []
 8         dic = {}
 9         for i in range(k):
10             dic.update({i:nums[i]})
11                 
12         maxindex = max(dic,key=dic.get)
13         result = list()
14         result.append(dic[maxindex])
15 
16         i=0
17         j=k
18         while j<len(nums):
19             del dic[i]
20             dic.update({j:nums[j]})
21             maxindex = max(dic,key=dic.get)
22             result.append(dic[maxindex])
23             i+=1
24             j+=1
25 
26         return result

显然这是暴力搜索算法,性能比较差,执行时间1800ms,基本上是超时的边缘了。

下面是参考其他人的,执行时间120ms

 1 class Solution:
 2     def maxSlidingWindow(self, nums: 'List[int]', k: int) -> 'List[int]':
 3         n=len(nums)
 4         stack=[]
 5         ans=[]
 6         for i in range(n):
 7             while stack and nums[i]>nums[stack[-1]]:
 8                 stack.pop()
 9             while stack and i-stack[0]>=k:
10                 stack.pop(0)
11             stack.append(i)
12             if i>=k-1: 
13                 ans.append(nums[stack[0]])
14         return ans

猜你喜欢

转载自www.cnblogs.com/asenyang/p/10480159.html