Patrones de Dos Apuntadores: Soluciones a Problemas Comunes en Python
Antes de continuar, espero que hayas solucionado o al menos hayas intentado solucionar los retos de la clase anterior. De ser así, aquí te comparto la manera en que los solucioné.
Recuerda que hay muchas formas de resolver un mismo problema, cuéntame qué te parecen estas soluciones, también revisa y aporta a las soluciones de otros Platzinautas. 👨🚀💚
1. Mover ceros al final
Dada la lista de enteros nums, mueve todos los ceros al final de la misma, manteniendo el orden relativo de los elementos no nulos.
Reto: reordena los valores “in place”, sin hacer una copia de la lista.
Dado un arreglo nums con n objetos de color rojo, blanco o azul, ordénalos en su lugar para que los objetos del mismo color sean adyacentes, con los colores en el orden rojo, blanco y azul.
Utilizaremos los enteros 0, 1 y 2 para representar el color rojo, blanco y azul, respectivamente.
Reto 1: debes resolver este problema sin utilizar la función de ordenación de la biblioteca.
Reto 2: ¿podrías idear un algoritmo de una sola pasada utilizando solo un espacio extra constante?
Dado un arreglo de números enteros ordenados en orden ascendente, devuelve una matriz de los cuadrados de cada número ordenados en orden no decreciente.
Ejemplo 1:
# Entrada: nums =[-4,-1,0,3,10]# Salida:[0,1,9,16,100]# Explicación: Después de elevar al cuadrado, el arreglo se convierte en [16,1,0,9,100].# Después de ordenar, se convierte en [0,1,9,16,100].
Dada una cadena de caracteres, averigua si la cadena dada es un palíndromo o no. Puedes eliminar un carácter de la cadena. Una cadena es un palíndromo si se lee igual hacia adelante y hacia atrás.
Ejemplo 1:
# Entrada: s ="aba"# Salida: true
Ejemplo 2:
# Entrada: s ="abca"# Salida: true
#Explicación: Podría eliminar el carácter 'c'.
Dadas dos listas de intervalos cerrados, lista1 y lista2, donde lista1[i] = [inicio_i, final_i] y lista2[j] = [inicio_j, final_j]. Cada lista de intervalos es disjunta por pares y está ordenada.
Devuelve la intersección de estas dos listas de intervalos.
Un intervalo cerrado [a, b] (con a <= b) denota el conjunto de números reales x con a <= x <= b. La intersección de dos intervalos cerrados es un conjunto de números reales que está vacío o representado como un intervalo cerrado. Por ejemplo, la intersección de [1, 3] y [2, 4] es [2, 3].
Felicitaciones por llegar hasta aquí. Recuerda que no importa si hubo algún o algunos ejercicios que se te dificultaron o no lograste resolver. Lo que realmente importa es que día a día sigas entrenando tu pensamiento lógico y comprendas mucho mejor cuándo vale la pena implementar patrones como el de Dos Apuntadores.
En el siguiente módulo usaremos el patrón de Ventana Deslizante. Es algo parecido al de Dos Apuntadores, pero con algunas variaciones en sus movimientos. ¡Nos vemos en la siguiente clase para aprenderlo!
buenos días cuando ejecuto el código " def mover_ceros(self, numeros: List[int]) -> None:
p1 = 0
for p2 in range(len(numeros)):
if numeros[p2] != 0:
numeros[p2], numeros[p1] = numeros[p1], numeros[p2]
p1+=1
for p2 in range(p1,len(numeros)):
numeros[p2] = 0
return numeros "
me aparece el error que List no esta definida, me gustaria saber como lo soluciono.
ya paso mucho tiempo, pero por si alguien se lo pregunta:
no sé porque se copió así, pero es porque debe ser numeros: list[int] o no definirle el tipo, creo que se hace para que sea entendible en otros lenguajes.
Para que funcione, solo quita "[int]" y a menos que definas una clase, también quita el "self".
Lo que recuerdo es que en python, ya existe el tipado, pero no es algo que haya estado siempre por lo que hay errores así, ahora que lo agregaron.
Dentro del ejercicio 7, en el ejemplo 1, hay un error a mi parecer, el output esperado debe ser: