剑指offer-64-滑动窗口的最大值

滑动窗口的最大值

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

思路

  • 3指针,定义个max指针,p指针,指针q=p-3+1,显然指针p,q可以合并。
    p: 0->len(num)
    max有两种情况
    • 如果指针p>max(是值大于),直接更新max=p
    • 如果指针q>max,那么遍历q到p,更新max为区间最大值
      其实类似牛客题解中的单调队列吧。相比建队列,指针法复杂度为o(1),时间复杂度相同

代码

import java.util.*;
public class Solution {
    public ArrayList<Integer> maxInWindows(int [] num, int size)
    {   ArrayList<Integer> arr=new ArrayList<>();
        if(size==0||size>num.length){return arr;}
        int max=0,p=0,q=p-size+1;
        while(p<num.length){
            if(num[p]>=num[max]){
                max=p;
            }
            if(q>max){
                max=q;
                for(int i=q;i<=p;i++){
                    max=num[i]>num[max]?i:max;
                }
            }
            // q>=0开始有滑动窗口了
            if(q>=0){
                arr.add(num[max]);
            }
            p++;
            q++;
        }
     return arr;
    }
}
剑指offer与数据结构 文章被收录于专栏

本专栏包括剑指offer题目和一些刷题用的数据结构,单调栈,树状数组,差分数组,后面还会更新红黑树等较为复杂的数据结构

全部评论

相关推荐

05-27 18:08
已编辑
门头沟学院 Java
程序员牛肉:就这两个烂大街项目+学院本+无实习基本就找不到。 优先建议你找信得过的学长包装一段实习,先追求不饿死再说。你这个学历不走点歪门邪道很难找到这个行业的好工作了
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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