Cada día me expuso a diferentes tipos de estructuras de datos y algoritmos. Aprendí a manejar
Algunos problemas implicaban estructuras más complejas, como listas enlazadas y árboles binarios, mientras que otros incluían matrices/matrices n-D, lo que me permitía trabajar en espacios multidimensionales.
La diversidad de los problemas me mantuvo alerta. Los problemas en la pista de 30 días de JavaScript de LeetCode me presentaron conceptos básicos como
La pista Top Interview 150 de LeetCode llevó las cosas un paso más allá, arrojándome entre problemas de diferente dificultad y enfoque. Resolver al menos uno de estos cada día fue invaluable. Estos problemas también me desafiaron a pensar más a menudo en la optimización y en cómo los diferentes enfoques podrían afectar drásticamente el tiempo de ejecución y la eficiencia de la memoria.
También tomé lecciones de Structy junto con estos desafíos para solidificar mi comprensión de los conceptos clave. Aprendí formas más eficientes de manejar algunas estructuras de datos, como las secciones sobre listas enlazadas y árboles binarios. Llegué a apreciar especialmente el enfoque dinámico de la plataforma para enseñar y resolver problemas de una manera que los haga fáciles de digerir. Es una gran plataforma para aprender DSA en un nivel muy básico y luego traducir esta comprensión a otros problemas de codificación que enfrento.
A medida que avanzaban los días, encontré muchos tipos de enfoques de solución, técnicas de resolución de problemas como
Encontré que el enfoque de dos punteros es una forma sencilla pero poderosa de resolver problemas que involucran secuencias (principalmente matrices y cadenas), al reducir el espacio de búsqueda para soluciones más eficientes. También utilicé algoritmos codiciosos donde necesitaba tomar decisiones localmente óptimas en cada paso.
Las técnicas de ventanas deslizantes fueron otra revelación: inicialmente desafiantes, pero valiosas para problemas que involucran subarreglos o subcadenas; problemas que requerían realizar un seguimiento de una gama móvil de elementos dentro de una secuencia. Los mapas hash y las tablas hash son excelentes para pares clave-valor en problemas que involucran búsquedas frecuentes.
Una de las técnicas más complejas con las que trabajé fue la programación dinámica. Al principio, DP me pareció bastante intimidante debido a la dificultad para reconocer subproblemas superpuestos, pero con la exposición repetida, la memorización se convirtió en mi mejor amiga para optimizar las llamadas recursivas.
Además de los problemas centrales de DSA, también tuve la oportunidad de probar conceptos de JavaScript más avanzados. Escribí funciones contenedoras y aprendí a controlar el flujo de mi código y ampliar la funcionalidad para requisitos específicos. Incluso aprendí a configurar temporizadores en funciones que me permiten manejar operaciones urgentes o limitar la frecuencia con la que se pueden ejecutar ciertas funciones.
Trabajar con prototipos me mostró que los tipos de datos se pueden manipular más allá de sus capacidades incorporadas mediante la creación de métodos personalizados. Esto me permitió ampliar la funcionalidad incorporada de tipos de datos como objetos y matrices de nuevas maneras. Llegué a apreciar la importancia de escribir código modular y limpio.
¡También aprendí la memorización, una técnica en la que modificas una función de modo que almacene argumentos previamente llamados con sus resultados! Este es un tipo de almacenamiento en caché que ayuda a mejorar el rendimiento en problemas donde hay múltiples llamadas a la misma función. Escribí sobre mi solución Memoize que supera el 99 % (memoria) aquí: Memoize Intutitive Solution supera el 99 % de memoria.
Otra cosa a la que comencé a prestar más atención durante este viaje fue a la optimización de mi código. Después de una introducción adecuada a la notación O grande en Structy, comprendí la importancia de la complejidad del tiempo y el espacio y aprendí la técnica óptima para los problemas más comunes. Hacia el final del desafío HackerRank, también aprendí a probar código usando clases y a escribir genéricos.
Cuando completé el desafío 30 días de código, sentí una profunda sensación de crecimiento. Mejoró mi capacidad para manejar una amplia gama de problemas y profundizó mi comprensión de JavaScript y DSA. Más que simplemente resolver problemas, este viaje de un mes fue un recordatorio para mí de que realmente podía esforzarme. Al ver las recompensas de la constancia y la disciplina, he renovado mi mentalidad para afrontar cualquier desafío con confianza y un sólido conjunto de técnicas.
Esta experiencia marca un hito importante en mi viaje de programación. Las habilidades que he perfeccionado durante estos 30 días sin duda se trasladarán a mi carrera como ingeniero de software.
Estoy orgulloso de mí por haberme esforzado y agradecido con mis amigos que me animaron y ofrecieron su apoyo y sabiduría durante todo el desafío.
","image":"http://www.luping.net/uploads/20241006/172818757367020cb51a890.jpg","datePublished":"2024-11-07T22:11:52+08:00","dateModified":"2024-11-07T22:11:52+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}Este septiembre, me embarqué en un desafío autoimpuesto 30 días de código, un compromiso para resolver al menos dos problemas de estructuras de datos y algoritmos (DSA) todos los días. Mi objetivo era salir de mi zona de confort, desarrollar coherencia y mejorar mis habilidades de resolución de problemas y mi lógica de programación.
No me limité a una sola plataforma: completé el desafío 30 días de código de HackerRank, el plan de 30 días de JavaScript de LeetCode y también abordé la pista Top Interview 150 de LeetCode, una colección de 150 problemas de entrevista típicos para cualquiera que se esté preparando para una entrevista de codificación. Además, tomé algunas lecciones sobre Structy para fortalecer aún más mi comprensión de los conceptos de DSA.
Resolví la mayoría de los problemas usando JavaScript (excepto algunos problemas de HackerRank donde JavaScript no era compatible, así que usé Python en su lugar). Para ayudarme a ser responsable y compartir mi progreso, publiqué los desafíos que resolví cada día en Twitter. Puede encontrarlos en esta ruta de cotización:
Cada día me expuso a diferentes tipos de estructuras de datos y algoritmos. Aprendí a manejar
Algunos problemas implicaban estructuras más complejas, como listas enlazadas y árboles binarios, mientras que otros incluían matrices/matrices n-D, lo que me permitía trabajar en espacios multidimensionales.
La diversidad de los problemas me mantuvo alerta. Los problemas en la pista de 30 días de JavaScript de LeetCode me presentaron conceptos básicos como
La pista Top Interview 150 de LeetCode llevó las cosas un paso más allá, arrojándome entre problemas de diferente dificultad y enfoque. Resolver al menos uno de estos cada día fue invaluable. Estos problemas también me desafiaron a pensar más a menudo en la optimización y en cómo los diferentes enfoques podrían afectar drásticamente el tiempo de ejecución y la eficiencia de la memoria.
También tomé lecciones de Structy junto con estos desafíos para solidificar mi comprensión de los conceptos clave. Aprendí formas más eficientes de manejar algunas estructuras de datos, como las secciones sobre listas enlazadas y árboles binarios. Llegué a apreciar especialmente el enfoque dinámico de la plataforma para enseñar y resolver problemas de una manera que los haga fáciles de digerir. Es una gran plataforma para aprender DSA en un nivel muy básico y luego traducir esta comprensión a otros problemas de codificación que enfrento.
A medida que avanzaban los días, encontré muchos tipos de enfoques de solución, técnicas de resolución de problemas como
Encontré que el enfoque de dos punteros es una forma sencilla pero poderosa de resolver problemas que involucran secuencias (principalmente matrices y cadenas), al reducir el espacio de búsqueda para soluciones más eficientes. También utilicé algoritmos codiciosos donde necesitaba tomar decisiones localmente óptimas en cada paso.
Las técnicas de ventanas deslizantes fueron otra revelación: inicialmente desafiantes, pero valiosas para problemas que involucran subarreglos o subcadenas; problemas que requerían realizar un seguimiento de una gama móvil de elementos dentro de una secuencia. Los mapas hash y las tablas hash son excelentes para pares clave-valor en problemas que involucran búsquedas frecuentes.
Una de las técnicas más complejas con las que trabajé fue la programación dinámica. Al principio, DP me pareció bastante intimidante debido a la dificultad para reconocer subproblemas superpuestos, pero con la exposición repetida, la memorización se convirtió en mi mejor amiga para optimizar las llamadas recursivas.
Además de los problemas centrales de DSA, también tuve la oportunidad de probar conceptos de JavaScript más avanzados. Escribí funciones contenedoras y aprendí a controlar el flujo de mi código y ampliar la funcionalidad para requisitos específicos. Incluso aprendí a configurar temporizadores en funciones que me permiten manejar operaciones urgentes o limitar la frecuencia con la que se pueden ejecutar ciertas funciones.
Trabajar con prototipos me mostró que los tipos de datos se pueden manipular más allá de sus capacidades incorporadas mediante la creación de métodos personalizados. Esto me permitió ampliar la funcionalidad incorporada de tipos de datos como objetos y matrices de nuevas maneras. Llegué a apreciar la importancia de escribir código modular y limpio.
¡También aprendí la memorización, una técnica en la que modificas una función de modo que almacene argumentos previamente llamados con sus resultados! Este es un tipo de almacenamiento en caché que ayuda a mejorar el rendimiento en problemas donde hay múltiples llamadas a la misma función. Escribí sobre mi solución Memoize que supera el 99 % (memoria) aquí: Memoize Intutitive Solution supera el 99 % de memoria.
Otra cosa a la que comencé a prestar más atención durante este viaje fue a la optimización de mi código. Después de una introducción adecuada a la notación O grande en Structy, comprendí la importancia de la complejidad del tiempo y el espacio y aprendí la técnica óptima para los problemas más comunes. Hacia el final del desafío HackerRank, también aprendí a probar código usando clases y a escribir genéricos.
Cuando completé el desafío 30 días de código, sentí una profunda sensación de crecimiento. Mejoró mi capacidad para manejar una amplia gama de problemas y profundizó mi comprensión de JavaScript y DSA. Más que simplemente resolver problemas, este viaje de un mes fue un recordatorio para mí de que realmente podía esforzarme. Al ver las recompensas de la constancia y la disciplina, he renovado mi mentalidad para afrontar cualquier desafío con confianza y un sólido conjunto de técnicas.
Esta experiencia marca un hito importante en mi viaje de programación. Las habilidades que he perfeccionado durante estos 30 días sin duda se trasladarán a mi carrera como ingeniero de software.
Estoy orgulloso de mí por haberme esforzado y agradecido con mis amigos que me animaron y ofrecieron su apoyo y sabiduría durante todo el desafío.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3