Problema diario de codificación: Programación de acertijos en su bandeja de entrada

P

Como casi cualquier otra profesión, la clave para convertirse en un gran programador es practicar. Practicar a menudo y de manera constante es una manera asombrosa, y posiblemente la mejor, de desafiarse a sí mismo y mejorar sus habilidades de programación.

Muchos de nosotros tenemos el deseo de trabajar en empresas tecnológicas de primer nivel, como Microsoft, Google, Facebook, etc. Aunque mucha gente tiene miedo de intentar postularse para trabajos de tan alto calibre, se siente demasiado intimidada o infravalorada. calificado para un puesto en una de esas empresas.

Ir a una entrevista con una de las principales empresas, o cualquier entrevista, con la mente clara y preparada es importante, ya que verse confiado y competente en una entrevista puede significar la diferencia entre conseguir el trabajo de sus sueños o ser rechazado.

Hay tantas cosas que una persona puede hacer para tener confianza en esa entrevista y, en mi opinión, la mejor manera es simplemente practicar. Ser capaz de resolver un problema en el momento le dice al entrevistador más sobre sus habilidades que cualquier cosa que pueda decir verbalmente.

Hay muchas formas en que una persona puede practicar, ya sea sobre problemas y proyectos personales, otros recursos como libros o utilizando otros servicios en línea. Problema de codificación diario es uno de esos servicios.

¿Qué es el problema de codificación diario?

Daily Coding Problem es una plataforma simple y muy útil que le envía un correo electrónico con un problema de codificación para que lo resuelva cada mañana. Esto asegura que practique de manera constante y con la frecuencia suficiente para mantenerse en forma durante un largo período de tiempo.

Practicar un solo problema al día es suficiente para tener un gran impacto en su conjunto de habilidades y confianza, especialmente cuando se enfrenta a una tarea que podría enfrentar en una empresa de tecnología de primer nivel en un futuro cercano.

Lo mejor de sus problemas es que utilizan problemas reales y preguntas de las principales empresas que otros candidatos se han enfrentado en sus sesiones de entrevistas allí. Y personalmente, estoy de acuerdo con su filosofía: siempre es mejor estar demasiado preparado que mal preparado.

Cualquiera puede utilizar su servicio, ya sea un aspirante a desarrollador autodidacta, un recién graduado de la universidad o un desarrollador profesional experimentado que busca perfeccionar sus habilidades. Lo que más importa es su comprensión de los conceptos, estructuras de datos y algoritmos que tiene a su disposición para resolver un problema determinado.

Y una de las mejores cosas de DCP es que recibe estos problemas de codificación en su bandeja de entrada de forma gratuita. Por una pequeña tarifa, también te enviarán las soluciones y explicaciones detalladas de cada problema que te envíen por correo electrónico a tu bandeja de entrada, que recibirás el día después del problema, dándote tiempo para resolverlo por tu cuenta. .

Un problema de ejemplo

Con cada problema que se le envíe por correo electrónico, obtendrá la empresa de origen, la formulación del problema y un ejemplo de código. En esta sección, veremos uno de los problemas de codificación de DCP y la solución detallada correspondiente:

Given two singly linked lists that intersect at some point, find the intersecting node. The lists are non-cyclical.

For example, given A = 3 -> 7 -> 8 -> 10 and B = 99 -> 1 -> 8 -> 10, return the node with value 8.

In this example, assume nodes with the same value are the exact same node objects.

Do this in O(M + N) time (where M and N are the lengths of the lists) and constant space.

Este problema fue planteado por Google en una entrevista real.

Tómese su tiempo para leer atentamente este problema y pensar un poco en cómo resolverlo antes de continuar. De acuerdo con la Preguntas frecuentes de DCP, debe tener alrededor de una hora para resolver estos problemas en las entrevistas, por lo que ese también debe ser el período de tiempo que se permita para resolverlos en casa.

Una vez que crea que lo ha descubierto, o cuando se queda atascado, puede echar un vistazo a la solución detallada proporcionada por Daily Coding Problem:

We might start this problem by first ignoring the time and space constraints, in order to get a better grasp of the problem.

Naively, we could iterate through one of the lists and add each node to a set or dictionary, then we could iterate over the other list and check each node we're looking at to see if it's in the set. Then we'd return the first node that is present in the set. This takes O(M + N) time but also O(max(M, N)) space (since we don't know initially which list is longer). How can we reduce the amount of space we need?

We can get around the space constraint with the following trick: first, get the length of both lists. Find the difference between the two, and then keep two pointers at the head of each list. Move the pointer of the larger list up by the difference, and then move the pointers forward in conjunction and check if they match.

def length(head):
    if not head:
        return 0
    return 1 + length(head.next)

def intersection(a, b):
    m, n = length(a), length(b)
    cur_a, cur_b = a, b

    if m > n:
        for _ in range(m - n):
            cur_a = cur_a.next
    else:
        for _ in range(n - m):
            cur_b = cur_b.next

    while cur_a != cur_b:
        cur_a = cur_a.next
        cur_b = cur_b.next
    return cur_a

DCP ofrece explicaciones detalladas y en profundidad como esta para ayudarlo a resolver cada problema y comprender realmente la solución, además de reforzar la lógica que utilizó si pudiera resolverlo por su cuenta.

Como puede ver, estos problemas dependen en gran medida tanto de la lógica como de la creatividad, que es lo que los hace muy difíciles de resolver. Pero una vez que haya practicado lo suficiente y haya aprendido los trucos detrás de estos problemas, como cómo pensar en el problema y la solución, y qué herramientas tiene a su disposición, se volverán mucho más fáciles.

¿Qué lenguajes de programación?

Actualmente, DCP proporciona soluciones en Python, ya que es muy conocido y similar al pseudocódigo, además de fácil de aprender. Esta parece ser una buena opción para las soluciones, ya que el código Python es bastante fácil de traducir a otros lenguajes, dada su sintaxis simple y su estilo de programación sencillo.

Además, DCP también está buscando expandir su grupo de soluciones a otros lenguajes, como Java, JavaScript, C ++ y Ruby.

Precios

La mejor parte de todo esto es que es absolutamente gratis suscribirse a su servicio y recibir problemas para resolver cada mañana.

Para recibir las soluciones por correo electrónico, por otro lado, requiere que pague una pequeña tarifa:

El plan anual le cobra solo $ 7.50 / mes (facturado anualmente) por sus servicios, eso es un poco más que una taza de café Starbucks en Alemania, o alrededor del precio de dos tazas de café promedio en los EE. UU.

Por el precio de un par de tazas de café, cada mes recibirá alrededor de 30 problemas de entrevistas de la vida real para resolver y mejorar enormemente sus habilidades y confianza. Es difícil encontrar otra inversión que valga la pena.

Otros recursos para el aprendizaje

Suerte para ti, Problema de codificación diario ¡no es el único lugar para practicar y aprender en línea!

Si los libros son más lo tuyo, asegúrate de echarle un vistazo a estos:

  • Rompiendo la entrevista de codificación
  • Los mejores libros de Java para todos los niveles
  • Los mejores libros de Python para todos los niveles
  • Los mejores libros de Machine Learning para todos los niveles

Si se está preparando para una gran entrevista, también le sugiero que lea algunos consejos que lo ayudarán a mejorar sus posibilidades de conseguir el trabajo:

  • Preparación para una entrevista de desarrollador de Python

O si está interesado en leer artículos sobre algunos de los lenguajes de programación más solicitados y populares en el mundo actual, consulte nuestros artículos de Node, Python o Java.

¡Feliz codificación!

About the author

Ramiro de la Vega

Bienvenido a Pharos.sh

Soy Ramiro de la Vega, Estadounidense con raíces Españolas. Empecé a programar hace casi 20 años cuando era muy jovencito.

Espero que en mi web encuentres la inspiración y ayuda que necesitas para adentrarte en el fantástico mundo de la programación y conseguir tus objetivos por difíciles que sean.

Add comment

Sobre mi

Últimos Post

Etiquetas

Esta web utiliza cookies propias para su correcto funcionamiento. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad