zoukankan      html  css  js  c++  java
  • 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

    思路分析:使用滑动窗口,stack是宽度为k的滑动窗口,并且里面的元素是从大到小排列的。

    外层滑动窗口每次取的是stack[0],也就是当前滑动个窗口范围内最大的值的下标,存储在stack[0]中。因此nums[stack[0]]就是当前范围的最大值。

  • 相关阅读:
    jFinal基于maven简单的demo
    quartz定时任务
    cors解决跨越问题
    poi导出excel
    layui富文本编译器后台获取图片路径
    HttpClient短信接口
    js分页
    El表达式日期处理
    【传智播客】Libevent学习笔记(二):创建event_base
    【传智播客】Libevent学习笔记(一):简介和安装
  • 原文地址:https://www.cnblogs.com/asenyang/p/10480159.html
Copyright © 2011-2022 走看看