【思路1】暴力
【思路2】利用一个队列维护这个窗口,队【0】出总是最大值,当滑到最新的元素时,判断队【0】是否还在窗口中,不在的话将其取出。然后判断最新的元素是否比其前面的大,如果比前面的大则将前面的取出(表示前面的已经没有用了),然后将这个最新的元素加入队,注意每次最新的都要加进去,即使不是最大也要加进去,因为有可能此时不是最大,但随着滑动窗口的滑动,前面比它大的滑出,然后它可能就是最大的了。最后将每个滑动窗口队[0]加如答案。
注意队列存的是下标,并不是值
class Solution:
def maxInWindows(self, num, size):
ans=[]
q=[]
for i in range(len(num)):
if len(q)>0 and i-size==q[0]:#判断最大值是否还在滑动窗口中
q.pop(0)
while len(q)>0 and num[i]>=num[q[-1]]:
q.pop()
q.append(i)
if i>=size-1:#相等表示第一个滑动窗口
ans.append(num[q[0]])
return ans