Ci viene dato un array con tutto un [ i ] > 0 .
Ora abbiamo bisogno di scoprire quante somme distinte possono essere formate dai suoi sottoarrays (dove un subarray è un intervallo contiguo dell'array, cioè per alcuni j , k , la somma è la somma di tutti i elementi del subarray). Ad esempio, se a = [ 1 , 2 , 1 ] , la risposta è 4: possiamo formare 1 , 2 , 3 , 4 .
So contare il numero di somme distinte nel tempo .
Inoltre, ho capito che questo è simile al problema classico in cui dobbiamo trovare il numero di sottostringhe distinte di una stringa. Stavo pensando alla possibilità di costruire un array di suffissi e risolverlo in modo simile (in tempi ). Ma non sono stato in grado di capire come modificarlo per funzionare qui. Ad esempio, se utilizziamo l'array di suffissi per a = [ 1 , 2 , 1 ] otterremo 5 casi invece di quattro accettabili. È possibile farlo utilizzando array di suffissi o sto pensando nella direzione sbagliata?
Inoltre c'è un'altra direzione in cui ho pensato. Dividi e conquista. Come se divido l'array in due parti ogni volta fino a quando non viene ridotto a un singolo elemento. Un singolo elemento può avere una somma. Ora se combiniamo due singoli elementi, può essere fatto in due modi: se entrambi i singoli intervalli hanno lo stesso elemento, allora otteniamo 2 somme diverse, oppure se entrambi hanno elementi diversi otteniamo 3 somme diverse. Ma non riesco a generalizzare questo per unire matrici di lunghezza maggiore di 1. È possibile unire due matrici di dimensioni m e ottenere la risposta in ?