Untitled
unknown
plain_text
a year ago
1.1 kB
9
Indexable
int numDistinctSubarray(vector<int> array) {
int output = 0;
map<int, int> maxSubarray;
// aunque el codigo dentro del loop parece O(N^2) en realidad estas recorriendo
// cada elemento solo 2 veces por lo que sigue siendo O(N) la complejidad de for.
for (int i = 0; i < array.size(); ) {
int j = i + 1;
while (j < array.size() && array[j-1] + 1 == array[j]) j++;
// el subarray [i ... j) son numeros consecutivos
// calcular los subarrays empezando en cada posicion i
while (i < j) {
int start = array[i];
int N = j - i;
if (maxSubarray[start] < N) {
int totales = N;
int duplicados = maxSubarray[start];
output += totales - duplicados;
maxSubarray[start] = N;
} else {
// no hay nada nuevo que contar, ya que anteriormente se habian contado
}
i++;
}
// i termina siendo igual a j, por el que para la siguiente
//iteracion el otro subarray empieza donde este termina
}
return output;
}Editor is loading...
Leave a Comment