Cómo mejorar mis habilidades de resolución de problemas para solicitar una pasantía en Google el próximo verano

Mirando los desafíos en LeetCode, varían en dificultad. Clonar un gráfico es un algoritmo de recorrido directo. Revertir los bits de un número entero debe ser fácil, ya sea con el violín de bits o incluso con un método de extracción de fuerza bruta. Aquí están los pasos generales de resolución de problemas:

1. Primero debes entender el problema. Esto es más de la mitad de la batalla. Leer el problema no es suficiente. Tienes que entender lo que está preguntando el problema. Por ejemplo, un problema dice: “Dada una cadena, encuentre la longitud de la subcadena más larga sin repetir caracteres. Por ejemplo, la subcadena más larga sin repetir letras para” abcabcbb “es” abc “, cuya longitud es 3. Para” bbbbb “La subcadena más larga es” b “, con una longitud de 1.”
¿Cómo entiendes lo que está preguntando este problema? En este caso, el problema da dos ejemplos que lo hacen fácil de entender. Encuentra la subcadena más larga que no tenga caracteres repetidos. Realmente sabes que lo entiendes si puedes crear tu propio ejemplo de lo que está buscando; por ejemplo, si la cadena es “bbbabbbb”, la respuesta sería “ab” con una longitud de 2 (o “ba” con una longitud de 2).

2. Una vez que entiendas, POR EJEMPLO, formularás un plan para alcanzar la meta. En nuestro ejemplo de cadena, comience con la idea más simple que tenga. Una forma de hacerlo es comenzar con el objetivo y trabajar hacia atrás. Entonces, con nuestro ejemplo de cadena, sabemos que el objetivo es una subcadena (parte de la cadena). Por lo tanto, tengo que sacar una cadena de la primera cadena y declararla como subcadena. Así que en mi ejemplo “bbbabbb” – la primera y más evidente subcadena es la primera letra “b”. ¿Puedo devolver eso como respuesta? No, porque si bien es como subcadena, no sé si es la subcadena más larga. Por lo tanto, una forma de comprobarlo es continuar por la cadena con las siguientes letras y, si la siguiente no se encuentra en la subcadena, la agregamos a la subcadena y tenemos una nueva subcadena candidata. Entonces, comience a trabajar esto en papel … así:
subcadena en el índice 0: “b”
siguiente letra en el índice 1 (comenzando desde 0): “b”
¿Está la siguiente letra en subcadena? SÍ
por lo tanto, la subcadena candidata sigue siendo “b” con una longitud de 1
Ahora, continúa, trata de hacer un mejor candidato.
Comenzando ahora en el índice 1 para nuestro NUEVO candidato:
subcadena en el índice 1: “b”
siguiente letra en el índice 2: “b”
¿Está la siguiente letra en subcadena? SÍ
por lo tanto, la subcadena candidata sigue siendo “b” con una longitud de 1
subcadena en el índice 2: “b”
siguiente letra en el índice 3: “a”
¿Está la siguiente letra en subcadena? NO, entonces agrégalo
por lo tanto, la subcadena candidata ahora es “ba” con una longitud 2
siguiente letra en el índice 4: “b”
¿Está la siguiente letra en subcadena? SÍ
entonces, la subcadena candidata sigue siendo “ba” con una longitud de 2 …

Puede ver cómo va este patrón y cómo continuará … ahora, tiene una solución potencial. Algunas personas lo llamarían método de fuerza bruta, pero no se preocupen por eso. El punto más importante es que resolviste una solución en papel.

3. Convierta su enfoque en el código fuente de la computadora y pruébelo con ejemplos “representativos”, al menos 3.

Ese es el enfoque básico. Es importante comenzar con pruebas simples y proceder a las más difíciles. ¡Los mejores deseos!

¿Solo quieres práctica de programación general? Si es así, resolver cualquier problema de diseño algorítmico y de software ayudaría. Utilice sitios web como http://TopCoder.com o http://CareerCup.com o http://www.reddit.com/r/dailypro

¿Quieres experiencia en la construcción de aplicaciones reales? Puedes aprender cómo hacer sitios web en http://codecademy.com .

Recomiendo encarecidamente crear una aplicación móvil o una aplicación web simple utilizando node.js o Ruby on Rails. Construir una aplicación demo-capaz le brinda la experiencia completa de diseño, implementación y despliegue (cosas que hará durante su pasantía). Además, puede poner esa aplicación en su currículum y mostrarlas a posibles (futuros) empleadores.

También te recomiendo que aprendas sobre el control de versiones (algo que la mayoría de las compañías de software usan) antes de tu pasantía. Mejor aún, cree una aplicación o una biblioteca de preguntas de algoritmos resueltos y llévelos a http://GitHub.com .

En primer lugar, determine el enfoque de su pasantía.
¿Es back-end, front-end, desarrollo de aplicaciones modiles o tal vez desarrollo de aplicaciones de escritorio?
En segundo lugar, tratar de aprender los detalles. El lenguaje y la pila de tecnología son bastante importantes. Si careces de habilidades, trata al menos de familiarizarte con las tecnologías en uso.
En tercer lugar, intente obtener información importante sobre la compañía, en la que va a pasar su pasantía. ¿Quienes son? ¿Qué hacen? Está interconectado con el punto anterior.

¡La mejor de las suertes!

Si tiene un teléfono inteligente (especialmente Android), tiene muy poca excusa como desarrollador para no desarrollar una aplicación pequeña para usted en su propio dispositivo.

Toma algún problema que veas en tu vida y crea una aplicación para resolverlo. El truco es NO hacerlo demasiado grande. Por ejemplo, si requiere crear / mantener una base de datos en línea, no aborde ese problema hasta que tenga más experiencia.

Tal vez siempre llegas tarde a clase, haz un despertador que requiera que resuelvas un rompecabezas. Tal vez gaste demasiado dinero, cree una aplicación para rastrear fácilmente sus gastos. Tal vez no haga suficiente ejercicio, cree una aplicación que haga un seguimiento de la frecuencia con la que hace ejercicio y de alguna manera lo motive (como hacer un seguimiento de cuántos días hace algo continuamente).

Si es algo simple y realmente ayuda a tu vida y te das cuenta de que lo usas a menudo, pule un poco y libéralo en la tienda porque otros podrían obtener el mismo valor. Si lo monetizas, incluso podrías ganar suficiente para el almuerzo todos los días (o el resto de tu vida si tienes suerte).

Advertencia: una vez que obtenga el error de desarrollo de la aplicación, es posible que nunca vuelva a nada más.

En realidad suena como que necesitas salir del paso a paso: la resolución de problemas no es una lista de verificación.

Hay dos formas básicas de mejorar su resolución de problemas. Una de ellas es estudiar algunos de los métodos utilizados, que parecen haber hecho algunos. La otra forma es practicar la resolución de problemas. Si no puede resolver problemas que están marcados como fáciles en Leetcode, necesita problemas más fáciles.

Busca ejercicios de programación al principio y haz algunos de ellos. Algunos de ellos es probable que encuentres muy fácil. Otros van a ser más difíciles. Si tiene problemas para resolver un problema y tiene que buscar una solución, asegúrese de entender el método que están utilizando para resolverlo. Si están usando operadores bitwise y no los tiene, busque los problemas de los operadores bitwise y haga algunos de ellos. Muchas veces, diferentes problemas tienen una solución similar (pero generalmente no la misma).

¡La única manera es seguir trabajando en ello! Trabaja los problemas en la página en unt.edu para empezar. La única manera de dominar un tema realmente complicado es el tiempo en la tarea.

Una forma es comenzar un proyecto simple en cualquier idioma que desee y comenzar a pensar en cómo lo diseñará y lo codificará. Puedes aprender sobre diseño UML y programación orientada a objetos. Aprenda también sobre algunos algoritmos y sus implementaciones en el idioma que desee.