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

滑动窗口的最大值

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
            
全部评论

相关推荐

哈哈哈哈哈哈哈哈哈哈这个世界太美好了
凉风落木楚山秋:毕业出路老师不管,你盖个章他好交差就完事了,等你盖完毕业了就不关他事情了
点赞 评论 收藏
分享
06-12 17:46
门头沟学院 Java
运营你豪哥:来说重点: ​1.项目前置,时间倒序。​​ 2.​项目描述强化结果与量化效果(STAR原则里的R)。​​ ​3.个人技能精炼,明确掌握程度,突出核心。​​ ​4.增加强有力开头的个人总结部分。​​ 5.​优化教育背景(成绩排名)、合并奖项与活动。​​
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
05-22 09:23
门头沟学院 Java
点赞 评论 收藏
分享
宇算唯航:目测实缴资本不超100W的小公司
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务