<第3節-ダブルポインタ、スライドウィンドウ>4.れんぞくぶんすうれつ


4.連続部分数列
<説明>
N個の数字からなる数列.
この数列において、連続部分数列の和が特定の数字Mであるプログラム
記入してください.
N=8、M=6の場合、次のように列挙されます.
1 2 1 3 1 1 1 2
合計6の連続部分数列は,{2,1,3},{1,3,1,{3,1,1}の3種類である.
<入力>
第1行はN(1≦N≦100000),M(1≦M≦1000000)を与える.
数列の要素値は1000を超えない自然数です.
<出力>
1行目の出力状況の数.
===================================================
<コード>
1つ1つの加算値が1つの値に等しい場合は、答えを加算し、加算値が1つの値より大きい場合は、前の数から1つ減算します.減算された値が特定の値と同じ場合は、答えが追加されます.
import java.util.*;

class Main {	
	public int solution(int n, int m, int[] arr){
		int answer=0, sum=0, lt=0;
		for(int rt=0; rt<n; rt++){
			sum+=arr[rt];
			if(sum==m) answer++;
			while(sum>=m){
				sum-=arr[lt++];
				if(sum==m) answer++; 
			}
		}
		return answer;
	}
		
		
	public static void main(String[] args) {
		Main main = new Main();
		Scanner scan = new Scanner(System.in);
		
		int n=scan.nextInt();
		int m=scan.nextInt();
		int[] array=new int[n];
		for(int i=0;i<n;i++) array[i]=scan.nextInt();
		System.out.print(main.solution(n,m,array));
		}
}
<重要>
1)for文とwhile文を正しく使う!