给定一个数组,找出存在多少这样的子序列(不需要是连续的),其中该子数组中的元素之和可以被 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);
}
}