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

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 increíble, y podría decirse que...

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 forma increíble, y posiblemente la mejor, de desafiarte a ti mismo y mejorar tus 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 muchas personas tienen miedo incluso de intentar postularse para trabajos de tan alto calibre, sintiéndose demasiado intimidados o subestimados. calificado para un puesto en una de esas empresas.

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

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

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

¿Qué es el problema de codificación diaria? {#¿Qué es un problema de codificación diaria?}

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 todas las mañanas. Esto asegura que practique de manera constante y con la frecuencia suficiente para mantenerse en forma durante un largo período de tiempo.

Practicar solo un 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 el futuro cercano.

Lo mejor de sus problemas es que usan problemas reales y preguntas de las principales empresas que otros candidatos han enfrentado en sus sesiones de entrevista allí. Y personalmente, estoy de acuerdo con su filosofía: siempre es mejor estar sobrepreparado que poco preparado.

Cualquiera puede usar su servicio, ya sea un aspirante a desarrollador autodidacta, un recién graduado universitario o un desarrollador profesional experimentado que busca mejorar sus habilidades. Lo más importante 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 le enviarán las soluciones y explicaciones detalladas para cada problema que le envíen por correo electrónico a su bandeja de entrada, que recibirá el día después del problema, lo que le dará tiempo para resolverlo. tu propio.

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 código de ejemplo. En esta sección, veremos uno de los problemas de codificación de DCP y la solución detallada correspondiente:

1
2
3
4
5
6
7
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.

Google preguntó este problema en una entrevista real.

Tómese su tiempo para leer detenidamente este problema y piense un poco en cómo lo resolvería antes de continuar. Según las Preguntas frecuentes de DCP, deberías tener alrededor de una hora para resolver estos problemas en las entrevistas, así que ese también debería ser el tiempo te permites resolverlos en casa.

Una vez que creas que lo has resuelto, o cuando te quedes atascado, puedes echar un vistazo a la solución detallada proporcionada por Daily Coding Problem:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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 profundas y detalladas como esta para ayudarlo a resolver cada problema y comprender realmente la solución, así como reforzar la lógica que utilizó si pudo resolverlo por su cuenta.

Como puede ver, estos problemas dependen en gran medida tanto de la lógica como de la creatividad, 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 brinda soluciones en Python, ya que es muy conocido y similar al pseudocódigo, además de ser simple de aprender. Esta parece ser una buena opción para las soluciones, ya que el código de Python es bastante fácil de traducir a otros idiomas, dada su sintaxis simple y su estilo de programación directo.

Además, DCP busca expandir su conjunto de soluciones a otros lenguajes también, 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, se requiere que pague una pequeña tarifa:

Daily Coding Problem pricing{.img-responsive}

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 promedio de dos tazas de café 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 dé tan buenos resultados.

Otros recursos para el aprendizaje

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

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

Si te estás preparando para una gran entrevista, también te sugiero que leas algunos consejos que te ayudarán a mejorar tus posibilidades de conseguir el trabajo:

O si está interesado en leer artículos sobre algunos de los lenguajes de programación más solicitados y populares del mundo actual, consulte nuestro Nodo, python o Java artículos.

¡Feliz codificación!