Directorio artículo
LeetCode gráfico plan de título cepillo
1, EDITORIAL
serie de dibujos pintados a mano, lanzó formalmente! ! ! "Cepillo plan de LeetCode título gráfico" venir! ! !
Hoy es el quinto, por un día, hasta dos días uno, recepción para supervisar. . . Sin supervisión pública de los mejores! ! !
Hoy es el algoritmo voraz, así como deliciosos ~
2, título
En primer lugar, mirada en el título,
primero debe pensar en el primer algoritmo voraz tiempo, ¿por qué?
Si desea elevarse secuencias mayor tiempo posible, entonces debemos dejar que la secuencia se eleva lo más lentamente posible (preferiblemente un solo cambio 1).
no porque tenga algoritmos finalización. . . La programación dinámica no aprendió. . . Este período será larga experiencia!
desgraciada palabra capital!
algoritmo voraz (también conocido como el algoritmo voraz) significa que, cuando la resolución de problemas, siempre realizados en las actuales parece ser la mejor opción.
3, el cuerpo
En primer lugar, analizar la situación,
Aquí lo más importante es la idea de que los codiciosos algoritmo - tener en cuenta si desea que la secuencia se eleve el mayor tiempo posible, a continuación, dejar crecer posible secuencia de lento, por lo que es necesaria la creación de una matriz, que es d
.
Atravesar toda la gama buscando secuencia ascendente, siempre y cuando la siguiente mayor elemento que el último elemento en la primera lectura, y después se d
guarda al final de la subida mínima más larga en el sub-elemento de la comparación de secuencias, si pueden cumplir con el algoritmo voraz, en la entrada, y así sucesivamente.
Aquí la gente aplaude wow --3 un punto es, no sé por qué se ve la cosa?
complejidad:
- Complejidad de tiempo:
. colección
longitud
n
, es la búsqueda binaria . - Espacio de la complejidad:
, la longitud de
n
la matrizd
.
4, el código
int lengthOfLIS(int* nums, int numsSize){
int len = 1;
if (numsSize == 0) return 0;
int d[numsSize+1];
d[len] = nums[0];
for (int i = 1; i < numsSize; ++i) {
if (nums[i] > d[len]){
d[++len] = nums[i];
}
else{
int l = 1, r = len, pos = 0;
while (l <= r) {
int mid = l + (r - l)/2;
if (d[mid] < nums[i]) {
pos = mid;
l = mid + 1;
}
else {
r = mid - 1;
}
}
d[pos + 1] = nums[i];
}
}
return len;
}
5, para discutir
1, en el sentido estricto, este binario problema de búsqueda y nada particular gran relación, 23333.
Con la vista de un estudio de caso que:
2. ¿Por qué matriz d
Si d[numsSize+1]
?
La razón es simple, con el fin de garantizar la sincronización subíndice.
3, la matriz d
aumenta monotónicamente cosa?
Solución a un problema en el LeetCode miraba, sintiendo no tan bueno como evidencia directa de lo contrario vendrá rápido, d
de hecho, la secuencia más larga que necesitamos, ya que va en aumento, por lo que, naturalmente, va en aumento.
Si usted tiene la oportunidad de ayudar a usted, por favor, ayúdame [como] un punto, a una [atención]! Si puedo por cierto [Comentario] ánimo de dar, lo agradecería.
Si quieres más recursos, bienvenido! Estoy preocupado por la pequeña luz del tubo, texto trastorno obsesivo-compulsivo MAX ~
Responder estructuras de datos [] para conseguir el regalo que hice para ti.
¿Quieres ver más texto (segmento) Sección (sub), dio la bienvenida a la concentración en número de micro-canales pública "pequeño tubo de luz programador" ~