Untitled
unknown
plain_text
a month ago
1.1 kB
4
Indexable
Never
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; }
Leave a Comment