题解 | #滑动窗口的最大值#

滑动窗口的最大值

https://www.nowcoder.com/practice/1624bc35a45c42c0bc17d17fa0cba788

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param num int整型一维数组 
# @param size int整型 
# @return int整型一维数组
#
class Solution:
    def maxInWindows(self , num: List[int], size: int) -> List[int]:
        # write code here
        res = []
        #窗口大于数组长度的时候,返回空
        if size <= len(num) and size != 0:
            from collections import deque
            #双向队列
            # 保证左边pop的时候一定当前滑动窗口最大值
            dq = deque()
            # 先找到第一个窗口 之后再开始滑动
            for i in range(size):
                # 判断之前的数字是否大于当前数 不大于的数字全部删除
                while len(dq) != 0 and num[dq[-1]] < num[i]:
                    dq.pop()
                # 添加索引 可以使用索引判断是否滑向下一个窗口
                # 没有的话旧的使用count计数
                dq.append(i)
            for i in range(size, len(num)):
                # 第一个元素就是当前窗口最大值
                res.append(num[dq[0]])
                # 剔除第一个元素(dq[0]) 
                # 此时已经滑向下一个窗口 而最大值是最左边元素
                while len(dq) != 0 and dq[0] < (i - size + 1):
                    dq.popleft()
                while len(dq) != 0 and num[dq[-1]] < num[i]:
                    dq.pop()
                dq.append(i)
            res.append(num[dq[0]])
        return res


        # 2次循环
        # if len(num) < size or size == 0:
        #     return []
        # from collections import deque
        # dq = deque()
        # length = len(num) - (size -1)
        # res = []
        # for i in range(length):
        #     temp = num[i:i + size]
        #     res.append(max(temp))
        # return res

全部评论

相关推荐

程序员鼓励师阿欢:哈哈哈哈哈笑死我了😂
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
03-08 19:53
已编辑
AAA不喝拿铁:海投吧,感觉项目写的可以了,能cover住提问就行。我根据真实面经整理得到的最全(高/中/低频)面试题,适合面试前短期突击&长期提高补充,需要的牛u可以关注一手我的专栏,祝好运
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务