看到力扣上的难度是困难,然后就想着先做出来再说,然后就这样了
class Solution:
def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
list= [0] * (len(nums)-k+1)
if len(nums)==1:
return nums
i=0
while i<len(list):
t=nums[i:i+k]
list[i]=max(t)
i+=1
return list

毫无疑问是失败的。。。
然后再想想怎么优化
class Solution:
def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
i=k
list= [0] * (len(nums)-k+1)
max_list=nums[0:k]
list[0]=max(max_list)
max_list[0]=max(max_list)
while i<len(nums):
max_list.append(nums[i])
if max_list[0]<nums[i]:
max_list=[nums[i]]
if len(max_list)==k+1:
max_list.pop(0)
max_list[0]=max(max_list)
list[i-k+1]=max_list[0]
i+=1
return list
这样子就是减少了同一元素必须重复使用k次的次数,所以时间复杂度有所减少,但似乎还是官方的双向队列更猛。

411

被折叠的 条评论
为什么被折叠?



