Anzahl von subarrays, wo die Summe der Ziffern ist teilbar durch K

Gegeben ein array, herauszufinden, wie viele solcher untersequenzen (nicht erforderlich zu sein zusammenhängenden) bestehen dort, wo die Summe der Elemente in diesem subarray ist teilbar durch K.

Ich weiß, ein Ansatz mit der Komplexität 2^n, wie unten angegeben. es ist wie die Suche nach alle nCi wobei i=[0,n] und überprüfen, ob die Summe ist teilbar durch K.
Bitte geben Sie Pseudo-Code sowas wie lineare/quadratische oder 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);
        }
}
  • Dieser Ansatz, die Sie erwähnt sieht mehr als brute-force-als divide-and-conquer, einfach nur sagen
  • Reduzieren Sie die original-array auf den Bereich [0 .. (k-1)] von modulo, dann verwenden Sie dynamische Programmierung, um die Anzahl der Kombination (eine dimension ist der modulo, die andere dimension ist die Anzahl der Elemente, die Sie haben summiert).
Schreibe einen Kommentar