题解 | #滑动窗口的最大值#
滑动窗口的最大值
http://www.nowcoder.com/practice/1624bc35a45c42c0bc17d17fa0cba788
# -*- coding:utf-8 -*-
class Solution:
def maxInWindows(self, num, size):
# write code here
q = []
if size == 0:
return None
if size == 1:
return num
for i in range(size):
if len(q) == 0:
q.append(i)
else:
for idx in q[::]:
if num[i] >= num[idx]:
q.pop(0)
q.insert(0, i)
ret =[]
ret.append(q[-1])
for i in range(size, len(num)):
if num[i] >= num[q[-1]]:
q = [i]
else:
for item in q[::]:
if num[i] >= num[item]:
q.pop(0)
q.insert(0, i)
if i - q[-1] >= size:
q.pop()
ret.append(q[-1])
retData = []
for idx in ret:
retData.append(num[idx])
return retData
class Solution:
def maxInWindows(self, num, size):
# write code here
q = []
if size == 0:
return None
if size == 1:
return num
for i in range(size):
if len(q) == 0:
q.append(i)
else:
for idx in q[::]:
if num[i] >= num[idx]:
q.pop(0)
q.insert(0, i)
ret =[]
ret.append(q[-1])
for i in range(size, len(num)):
if num[i] >= num[q[-1]]:
q = [i]
else:
for item in q[::]:
if num[i] >= num[item]:
q.pop(0)
q.insert(0, i)
if i - q[-1] >= size:
q.pop()
ret.append(q[-1])
retData = []
for idx in ret:
retData.append(num[idx])
return retData