给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,4,2,6,[2,5,1]}。
思路:用双端队列,实现窗口最大值的更新,生成双端队列,qmax={},双端队列中存放着数组中的下标值,假设当前数为arr[i],放入规则如下:
1、如果qmax为空,直接把下标i放入qmax中

通过双端队列维护滑动窗口最大值的算法,对于给定数组和窗口大小,可以找出所有窗口的最大值。例如,数组{2,3,4,2,6,2,5,1}和窗口大小3,得到最大值为{4,4,6,6,6,5}。利用双端队列,当新元素比队尾元素小或队头元素已过期时,更新队列,保持队列始终包含窗口内的最大值。"
117801411,10542169,Django动态显示下拉列表选择后的员工技能表,"['Django', '前端开发', '后端开发', '数据库', '模板引擎']
最低0.47元/天 解锁文章
954

被折叠的 条评论
为什么被折叠?



