与えられた配列で、その部分配列の要素の合計が K で割り切れる部分配列 (連続している必要はありません) がいくつ存在するかを求めます。
以下に示すように、複雑さ 2^n のアプローチを知っています。これは、i=[0,n] のすべての nCi を見つけて、合計が K で割り切れるかどうかを検証するようなものです。線形/二次または n^3 などの疑似コードを提供してください。
static int numways = 0;
void findNumOfSubArrays(int [] arr,int index, int sum, int K) {
if(index==arr.length) {
if(sum%k==0) numways++;
}
else {
findNumOfSubArrays(arr, index+1, sum, K);
findNumOfSubArrays(arr, index+1, sum+arr[index], K);
}
}