zoukankan      html  css  js  c++  java
  • 滑动窗口思路精髓总结

    滑动窗口首先定义
    int l=0,r=0;
    然后r一定每次循环都要往后移一位,至于左窗口,我们在内部考虑,需要左窗口移动的时候,我们在一次循环内,直接移动到可以的位置,然后再计算,r++;
    while(r<len){
       count+=arr[r];
        while(不满足条件的时候){
              l++;
              count-=arr[l];
        }
        计算;
        r++;        
    }
    总而言之,没次进来需要加arr[r],然后对于窗口条件不满足需要移动左边界的,我们在一个while内直接搞完,最后r++;
    就是每次循环一次,r一定++了一次。

    实例:

      LC1004:给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 。

      返回仅包含 1 的最长(连续)子数组的长度。

     public int longestOnes(int[] A, int K) {
            int res=0,l=0,r=0;
            while(r< A.length){
                if(A[r]==0){
                    if(K>0){
                        K--;
                    }
                    else{
                        res=res>(r-l)?res:(r-l);
                        while(A[l++]==1);
                    }
                }
                r++;
            }
            res=res>(r-l)?res:(r-l);
            return res;
        }
  • 相关阅读:
    bfs两种记录路径方法
    次小生成树
    2018 ICPC 区域赛 焦作场 D. Keiichi Tsuchiya the Drift King(计算几何)
    数组分组
    POJ
    数位DP详解
    2018ICPC青岛 E
    HDU
    Google工程师打造Remix OS系统 桌面版安卓下载
    使用angular封装echarts
  • 原文地址:https://www.cnblogs.com/ningxinjie/p/13554594.html
Copyright © 2011-2022 走看看