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

滑动窗口的最大值

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

相关推荐

不知道怎么取名字_:愚人节收到的吧,刚看到有人也是愚人节说收到offer的
腾讯求职进展汇总
点赞 评论 收藏
分享
Kurumis:整个简历看下来就发现你其实对测试理解还很浅,很多地方都是硬凑上去,项目也是学生课设级别,没什么含金量 首先是学习建议: 1.系统性了解一个真实工程的框架,有利于你后续提升项目含金量,理解测试的逻辑 2.真正去学一下自动化测试和性能测试 再就是简历本身包装问题: 1.投测试的话就不要说自己独立开发自己测,专注描述自己怎么做测试的 2.项目经历太像套话,很容易让人怀疑你到底真的做过没有,比如并发是具体做了多少并发?自动化脚本是怎么跑兼容性和性能测试的?测试用例写了多少条? 3.教务管理系统一听就是数据库课设作业,含金量不高,不过你可以在原项目基础上重构扩展,比如添加docker容器部署MySQL和Redis,添加消息队列和锁机制防止系统扛不住高并发访问,让它真的像个实际工程 4.技能里性能专项测试没有把握不要乱写,就写你会什么工具就行了,做专项性能测试的都是行业大佬,你要写的话一定要有对应的专项性能测试项目 5.可以在简历里附上项目链接,压缩简历内容的同时提升简历真实性
今天你投了哪些公司?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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