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

滑动窗口的最大值

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

思路:暴力算法显然不行,采用双端队列的方法

1、双端队列维护当前窗口的中的最大值

2、如果待处理数字大于队列中最大值,全部pop,将最大值插入

3、如果待处理数字小于队列中最大值,将队列中小于当前值的值pop,将其插入指定位置

4、队列中存储数字的坐标,为了判断队列中值是否已经超出窗口

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param num int整型一维数组 
# @param size int整型 
# @return int整型一维数组
#
class Solution:
    def maxInWindows(self, num, size):
        
        if size == 1:
            return num
        # write code here
        result = []
        que = []
        
        for i in range(len(num)):
            if len(que) == 0:
                que.append(i)
                continue
            
            while len(que) > 0 and i - size + 1 > que[0]:
                que.pop(0)
            
            # 当前值大于队列中值
            while len(que) > 0 and num[i] > num[que[-1]]:
                que.pop()
            que.append(i)
            
            if i >= size - 1:
                result.append(num[que[0]])
            
        return result
            
全部评论

相关推荐

Bug压路:老哥看得出来你是想多展示一些项目,但好像一般最多两个就够了😂页数一般一页,多的也就2页;这些项目应该是比较同质化的,和评论区其他大佬一样,我也觉得应该展示一些最拿手的(质量>数量)😁😁😁专业技能部分也可以稍微精简一些
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务