Fuente: https://resources.workable.com/
Todos nos hemos preparado para una entrevista de codificación en alguna vez de nuestras vidas. Si está leyendo este post hoy, en su mayoría dará una entrevista pronto. ¡La mejor de las suertes! ¡Que la fuerza esté con usted!
¿Qué es una prueba de codificación? Si está realizando una prueba de codificación por primera vez, permítame decirle qué esperar. La prueba de codificación de forma general consta de preguntas algorítmicas que evalúan sus habilidades en estructuras de datos y optimización de código.
Es factible que las preguntas formuladas en este segmento no estén de forma directa asociadas con su trabajo. En realidad, es casi seguro que nunca escribirá códigos para chequear si un número es primo, un código para hallar el palíndromo o un código para hallar la subcadena común más larga de 1000 cadenas en funcionamiento. El propósito de esta prueba es medir su procedimiento de pensamiento y su nivel de programación.
Recuerde una cosa antes de comenzar cualquier prueba de codificación. Esta sugerencia es válida en los casos en que su entrevistador esté presente mientras realiza la prueba o tiene los datos de contacto de su entrevistador.
En el desafortunado caso en el que tenía un algoritmo en mente pero no podía escribir el programa, explique su procedimiento de pensamiento (algoritmo) a su entrevistador. No es una situación en blanco y negro. Idear en voz alta o expresar sus ideas al entrevistador podría darle al entrevistador una mejor comprensión de sus habilidades.
¿Cómo prepararse para la prueba de codificación?
Muchos programadores experimentados sugieren que practicar muchos problemas ayudará a desarrollar la intuición y le proporcionará herramientas para solucionar nuevos problemas. Muchos sitios web como HackerRank y LeetCode le posibilitan practicar su código y comprender qué tan optimizada está su solución.
Ahora sabe qué esperar de esta etapa del procedimiento de contratación y conoce algunos sitios que lo ayudarán en el camino. A pesar de esto, ¿cómo se resuelven estos problemas? Te explicaré el tren de pasos a seguir que personalmente me ha ayudado.
Es imposible prepararse para una entrevista de codificación y no probar esta declaración de problema.
«Dado un número entero x
, regreso true
si x
es un entero palíndromo.«
Me encontré con este problema mientras practicaba para una de mis entrevistas de codificación usando LeetCode. aquí. Usaré este problema para explicar los pasos.
Como quería divertirme mientras codificaba, decidí experimentar con listas. No sé si este código se ha escrito antes, a pesar de esto, este fue mi esfuerzo personal.
Después de ver algunos videos y comprender el enfoque que adoptan algunos codificadores para solucionar estos problemas algorítmicos, he consolidado los siguientes pasos para solucionar este problema. Los pasos que se mencionan a continuación se pueden usar para cualquier problema algorítmico. El problema del palíndromo solo se utiliza como ejemplo para mostrar los pasos para abordar cualquier problema de codificación.
1. ¿Entiendo la pregunta – ¿Qué es un palíndromo?
Según Merriam-Webster, un palíndromo se establece de la próxima manera:
una palabra, verso u oración (como «Podía estar yo antes de ver a Elba») o un número (como 1881) que se lee igual hacia atrás o hacia adelante
Solo consideramos números enteros en este problema.
Ejemplos: 12321, 22, 56877865
2. ¿Cuáles son las limitaciones a considerar antes de comenzar a escribir el código?
Las restricciones aquí se refieren a las suposiciones que hacemos antes de escribir el código. No comprobaremos si se cumplen estas condiciones. Se supone que los argumentos pasados a la función cumplirán las siguientes condiciones. Las restricciones varían según los enunciados del problema. He reducido las siguientes limitaciones para centrarme en el tema principal de discusión: el uso de una lista en este problema.
I. Solo los números enteros se pasan como argumentos.
ii. Los enteros negativos no se consideran palíndromos.
3. Método de fuerza bruta
El enfoque de fuerza bruta se establece en Merriam-Webster como-
confiar en o lograr a través de la aplicación de fuerza, esfuerzo o poder en cantidades de forma general grandes en lugar de métodos más eficientes, cuidadosamente planificados o dirigidos con precisión
El enfoque de la fuerza bruta suele ser el primer enfoque que nos viene a la mente cuando abordamos cualquier cuestión de programación.
Aquí, el enfoque que consideré fue invertir el número entero y compararlo con el número entero original.
#Brute Force Approach def isPalindrome(x): #First make sure that the result is False when the integer is negative if x<0: return False #Initialising the reversed string to 0 rev = 0 #Assigning x to original as we will be modifying x in the below steps original = x #This while loop is used to get the reverse of an integer. while x>0: # x%10 (reminder when x is divided by 10) will give the last digit of x rev = rev*10 + x%10 #Remove the last digit from x to use if for the next step of the while loop x = int(x/10) #Check if the reversed integer is equal to the original integer if int(rev) == original: return True else: return False
El código se puede explicar de la próxima manera:
I. Si el número entero es negativo, devuelve falso.
II. Inicialice un entero (rev) a 0. esta variableEn estadística y matemáticas, una "variable" es un símbolo que representa un valor que puede cambiar o variar. Existen diferentes tipos de variables, como las cualitativas, que describen características no numéricas, y las cuantitativas, que representan cantidades numéricas. Las variables son fundamentales en experimentos y estudios, ya que permiten analizar relaciones y patrones entre diferentes elementos, facilitando la comprensión de fenómenos complejos.... se utilizará para guardar el reverso del entero que se va a chequear.
III. Inicie un ciclo while. En el ciclo while, obtenemos el reverso del entero original
IV. Verifique si la lista creada en el Paso II y III son iguales. En caso de ser así, el número es un palíndromo.
Este código es de complejidad temporal O (log n).
4. La diversión comienza aquí
El cuarto paso es la optimización. A pesar de esto, decidí utilizar listas para lo mismo y revisar su resultado.
Mi código era el siguiente:
#Solution using Lists def isPalindrome(x): #First make sure that the result is False when the integer is negative if x<0: return False #Convert the integer into a list : 123 becomes [1, 2, 3] lst_int = [int(num) for num in str(x)] #Reverse the list : [1,2,3] becomes [3,2,1] reverse_lst = lst_int[::-1] #Check if the reversed list is the same as the original list if lst_int == reverse_lst: return True else: return False
El código se puede explicar de la próxima manera:
I. Si el número entero es negativo, devuelve falso
II. Convierta el entero x en una lista: 123 se convierte en [1,2,3]
III. Invierta la lista: [1,2,3] se convierte en [3,2,1]
IV. Verifique si la lista creada en el Paso II y III son iguales. En caso de ser así, el número es un palíndromo.
Podría parecer que podríamos haber usado de forma directa la función de cadena en el entero y revertir la cadena en lugar de utilizar la lista. A pesar de esto, si ve la pregunta en LeetCode, dice: no almacene el número entero como una cadena. De ahí la respuesta.
Cada línea de este código es de complejidad O (n). Agregar múltiples declaraciones de complejidad O (n) no aumenta la complejidad del algoritmo. Por eso, esta es la respuesta O (n).
Claramente, esta solución es peor que el método de fuerza bruta que dispone de una complejidad de O (log n). Este paso es el más difícil por un motivo. Debido a que tenemos que pensar mucho para asegurarnos de no empeorar las cosas de lo que ya están. El paso cuatro es un paso iterativo que se repite hasta que se observa una cierta mejora en la complejidad temporal o espacial del código.
Visita aquí para ver las discusiones de sus compañeros programadores e inspirarse para aprovechar al máximo el código anterior
Conclusión
Esta no es la respuesta optimizada que debería probar en su próxima entrevista. Es solo un trampolín para decirte cómo pensar. Soy un aprendiz como tú y aprendo algo nuevo cada día. Al mismo tiempo, no quiero esperar a convertirme en un experto para compartir lo que aprendo.
Le insto a que pruebe todas las ideas que se le ocurran. ¡Tal vez tengas la próxima gran idea!
¡Feliz codificación!
Los medios que se muestran en este post no son propiedad de DataPeaker y se usan a discreción del autor.
Relacionado
Posts Relacionados:
- Codificación categórica | Una codificación en caliente frente a la codificación de etiquetas
- Prueba de hipótesis | Prueba de hipótesis para principiantes en ciencia de datos
- Manejo de excepciones en Python | Prueba y excepto en Python
- Cómo realizar una codificación One-Hot para variables multicategóricas