zoukankan      html  css  js  c++  java
  • 剑指offer——滑动窗口最大值

    解题思路:

    https://www.jianshu.com/p/5b4de9c6117c

     1 import java.util.ArrayList;
     2 import java.util.ArrayDeque;
     3 public class Solution {
     4     public ArrayList<Integer> maxInWindows(int [] num, int size)
     5     {
     6         ArrayList<Integer> result = new ArrayList<>();
     7         // 排除特殊情况,窗口的长度为0
     8         if (size==0) return result;
     9         
    10         // 滑动窗口最左边数的index
    11         int begin;
    12         // 建立一个双端队列
    13         ArrayDeque<Integer> q = new ArrayDeque<>();
    14         for(int i=0;i<num.length;i++){
    15             // begin是窗口起始位置
    16             begin = i-size+1;
    17             // 队列空,直接加入
    18             if(q.isEmpty())
    19                 q.add(i);
    20             // 若队列最左边值已经不在窗口内,直接删除
    21             else if(begin > q.peekFirst())
    22                 q.pollFirst();
    23             
    24             // 从队尾开始比较,把所有比他小的值丢掉
    25             while((!q.isEmpty()) && num[q.peekLast()] <= num[i])
    26                 q.pollLast();
    27             // 随后再把它放进去
    28             q.add(i);
    29             
    30             // 若窗口起始位置在数组的0位置上或者之后(窗口是完整大小的),才计算窗口的有效最大值
    31             if(begin>=0){
    32                 // 永远是队列最左边最大,加入结果集
    33                 result.add(num[q.peekFirst()]);
    34             }
    35         }
    36         return result;
    37     }
    38 }
  • 相关阅读:
    腾讯的张小龙是一个怎样的人?
    wordpress 推荐几个主题
    heidisql 可以查看sql
    phpmyadmin 连接外部数据库
    两个效果不错胡时间轴网站
    phpstorm与Mint 快捷键冲突
    Android Action
    Tomcat server.xml
    awk
    makefile
  • 原文地址:https://www.cnblogs.com/wangyufeiaichiyu/p/11228240.html
Copyright © 2011-2022 走看看