双指针模板

Posted 猪八戒1.0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了双指针模板相关的知识,希望对你有一定的参考价值。

for (int i = 0, j = 0; i < n; i ++ )

    while (j < i && check(i, j)) j ++ ;

    // 具体问题的逻辑

统计子矩阵https://www.lanqiao.cn/problems/2109/learning/

视频讲解

https://www.douyin.com/user/MS4wLjABAAAAuASqCxL6h2VeaG7NyeyvYYSh8rRm1JuoBv3BHXqaQbI?modal_id=7189999543398747404

代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;

public class Main 
      static int N=510;
    static long a[][]=new long[N][N];
    static long s[][]=new long[N][N];
    static long ans=0;
    static long k;
    static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
   
    
    public static void main(String[] args) throws IOException 
        String [] ts=br.readLine().split(" ");
        int n=Integer.parseInt(ts[0]);
        int m=Integer.parseInt(ts[1]);
        k=Integer.parseInt(ts[2]);
        for(int i=1;i<=n;i++) 
            ts=br.readLine().split(" ");
            for(int j=1;j<=m;j++) 
                a[i][j]=Integer.parseInt(ts[j-1]);                
            
        
        for(int i=1;i<=n;i++) 
            for(int j=1;j<=m;j++) 
                s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j];
            
        
        for(int x1=1;x1<=n;x1++) 
            for(int x2=x1;x2<=n;x2++) 
                for(int i=1,j=1;i<=m;i++) 
                    while(j<=i&&!check(x1,j,x2,i))
                        
                        j++;
                    
                    ans+=(i-j+1);
                
            
        
        System.out.println(ans);
    
    private static boolean check(int x1, int j, int x2, int i) 
        long num=s[x2][i]-s[x1-1][i]-s[x2][j-1]+s[x1-1][j-1];
         
        return num<=k;
    

以上是关于双指针模板的主要内容,如果未能解决你的问题,请参考以下文章

算法模板-双指针

九十六双指针和滑动窗口算法模板

九十六双指针和滑动窗口算法模板

九十六双指针和滑动窗口算法模板

双指针模板

双指针模板