59 滑动窗口的最大值

2018-07-03  本文已影响0人  土味老猪

CSDN作者独孤呆博
写的很好,贴一下方便自己以后复习。
···class Solution:
def maxInWindows(self, num, size):
# 如果数组 num 不存在,则返回 []
if not num:
return []
# 如果滑动窗口的大小大于数组的大小,或者 size 小于 0,则返回 []
if size > len(num) or size <1:
return []

    # 如果滑动窗口的大小为 1 ,则直接返回原始数组
    if size == 1:
        return num

    # 存放最大值,次大值的数组,和存放输出结果数组的初始化
    temp = [0]
    res = []

    # 对于数组中每一个元素进行判断
    for i in range(len(num)):
        # 判断第 i 个元素是否可以加入 temp 中
        # 如果比当前最大的元素还要大,清空 temp 并把该元素放入数组
        # 首先判断当前最大的元素是否过期
        if i -temp[0] > size-1:
            temp.pop(0)
        # 将第 i 个元素与 temp 中的值比较,将小于 i 的值都弹出
        while (len(temp)>0 and num[i] >= num[temp [-1]]):
            temp.pop()
        # 如果现在 temp 的长度还没有达到最大规模,将元素 i 压入
        if len(temp)< size-1:
            temp.append(i)
        # 只有经过一个完整的窗口才保存当前的最大值
        if i >=size-1:
            res.append(num[temp [0]])
    return res

s = Solution()
A = [2,3,4,2,6,2,5,1]
print(s.maxInWindows(A,3))

上一篇 下一篇

猜你喜欢

热点阅读