Dato un array di numeri interi N positivi. Può disporre di sotto-array n*(n+1)/2
compresi i sotto-array a elemento singolo. Ogni sotto-array ha una somma S
. Trovare S's
per tutti i sotto-array è ovviamente O(n^2)
in quanto il numero di sotto-array è O(n^2)
. Molte somme S's
possono anche essere ripetute. Esiste un modo per trovare il conteggio di tutte le somme distinte (non i valori esatti delle somme ma solo il conteggio) in O(n logn)
.Ricerca della somma del sub-array in un array intero
Ho provato un approccio ma bloccato sulla strada. Ho iterato la matrice dall'indice 1 al n.
Dire che a[i]
è l'array specificato. Per ogni indice i
, a[i]
verrà aggiunto a tutte le somme in cui è coinvolto lo a[i-1]
e si includerà anche come singolo elemento. Ma il duplicato emergerà se tra le somme in cui è implicato a[i-1]
, la differenza di due somme è a[i]
. Intendo dire che, ad esempio, le somme Sp
e Sq
terminano allo a[i-1]
e la differenza di entrambi è a[i]
. Quindi Sp + a[i]
equivale a Sq
, fornendo come duplicato Sq
.
Dire C[i]
è il conteggio delle somme distinte in cui termina a a[i]
.
Quindi C[i] = C[i-1] + 1 - numbers of pairs of sums in which a[i-1] is involved whose difference is a[i]
.
Ma il problema è trovare la parte del numero di coppie in O(log n)
. Per favore, dammi qualche suggerimento su questo o se sono su una strada sbagliata e un approccio completamente diverso è necessario.
Beh, è un problema interessante.Tutto quello che sto arrivando potenzialmente richiede di considerare tutte le coppie di elementi di input, che è O (n^2). Il mio istinto dice che è impossibile. – user2357112
Sono stato assicurato da uno che mi ha dato il problema che O (n logn) esiste. Ho passato tutta la giornata a pensare. – user2011120
Se sei ancora bloccato domani, chiedigli una demo adattabile, quindi sai che non ti sta dando fastidio. – user2357112