Más de 120 desafíos de codificación continuamente actualizados, interactivos y basados en pruebas , con tarjetas didácticas de Anki.
Los desafíos se centran en los algoritmos y las estructuras de datos que se encuentran en las entrevistas de codificación .
Cada desafío tiene una o más soluciones de referencia que son:
Los desafíos pronto proporcionarán sugerencias incrementales bajo demanda para ayudarle a llegar a la solución óptima.
Los cuadernos también detallan:
También se incluyen implementaciones de referencia probadas unitariamente de varias estructuras de datos y algoritmos.
La baraja de tarjetas Anki proporcionada utiliza repeticiones espaciadas para ayudarle a retener conceptos clave.
Ideal para usar mientras estás en movimiento.
¿Busca recursos que le ayuden a prepararse para las entrevistas de Diseño de sistemas y Diseño orientado a objetos ?
Echa un vistazo al repositorio hermano The System Design Primer, que contiene mazos Anki adicionales:
Cada desafío tiene dos cuadernos, un cuaderno de desafíos con pruebas unitarias para que usted las resuelva y un cuaderno de soluciones como referencia.
Formato : Categoría de desafío - Número de desafíos
Número total de desafíos: 120
Implementaciones completamente funcionales y probadas unitariamente de las siguientes estructuras de datos:
Implementaciones completamente funcionales y probadas unitariamente de los siguientes algoritmos:
Créditos de imagen
Desafío | Cuaderno estático |
---|---|
Determinar si una cadena contiene caracteres únicos | Desafío │ Solución |
Determinar si una cadena es una permutación de otra | Desafío │ Solución |
Determinar si una cuerda es una rotación de otra. | Desafío │ Solución |
Comprimir una cadena | Desafío │ Solución |
Invertir caracteres en una cadena | Desafío │ Solución |
Dadas dos cadenas, encuentre el carácter diferente | Desafío │ Solución |
Encuentre dos índices que sumen un valor específico | Desafío │ Solución |
Implementar una tabla hash | Desafío │ Solución |
Implementar zumbidos efervescentes | Desafío │ Solución |
Encuentra el primer carácter no repetido en una cadena | Contribuir │ Contribuir |
Eliminar caracteres especificados en una cadena | Contribuir │ Contribuir |
Invertir palabras en una cadena | Contribuir │ Contribuir |
Convertir una cadena a un número entero | Contribuir │ Contribuir |
Convertir un número entero en una cadena | Contribuir │ Contribuir |
Añadir un desafío | Contribuir │ Contribuir |
Desafío | Cuaderno estático |
---|---|
Eliminar duplicados de una lista vinculada | Desafío │ Solución |
Encuentre el késimo hasta el último elemento de una lista vinculada | Desafío │ Solución |
Eliminar un nodo en medio de una lista vinculada | Desafío │ Solución |
Particionar una lista vinculada alrededor de un valor dado | Desafío │ Solución |
Suma dos números cuyos dígitos están almacenados en una lista vinculada | Desafío │ Solución |
Encuentra el inicio de un bucle de lista enlazada | Desafío │ Solución |
Determinar si una lista enlazada es un palíndromo | Desafío │ Solución |
Implementar una lista enlazada | Desafío │ Solución |
Determinar si una lista es cíclica o acíclica | Contribuir │ Contribuir |
Añade un desafío | Contribuir │ Contribuir |
Desafío | Cuaderno estático |
---|---|
Implementar n pilas usando una sola matriz | Desafío │ Solución |
Implementar una pila que realice un seguimiento de su elemento mínimo. | Desafío │ Solución |
Implementar un conjunto de clases de pilas que envuelve una lista de pilas limitadas por capacidad | Desafío │ Solución |
Implementar una cola usando dos pilas. | Desafío │ Solución |
Ordenar una pila usando otra pila como búfer | Desafío │ Solución |
Implementar una pila | Desafío │ Solución |
Implementar una cola | Desafío │ Solución |
Implementar una cola de prioridad respaldada por una matriz | Desafío │ Solución |
Añadir un desafío | Contribuir │ Contribuir |
Desafío | Cuadernos estáticos |
---|---|
Implementar búsqueda en profundidad (antes, dentro y después del orden) en un árbol | Desafío │ Solución |
Implementar búsqueda en amplitud en un árbol | Desafío │ Solución |
Determinar la altura de un árbol. | Desafío │ Solución |
Cree un árbol de búsqueda binario con una altura mínima a partir de una matriz ordenada | Desafío │ Solución |
Cree una lista vinculada para cada nivel de un árbol binario | Desafío │ Solución |
Comprobar si un árbol binario está equilibrado | Desafío │ Solución |
Determinar si un árbol es un árbol de búsqueda binario válido | Desafío │ Solución |
Encuentre el sucesor en orden de un nodo determinado en un árbol de búsqueda binario | Desafío │ Solución |
Encuentre el segundo nodo más grande en un árbol de búsqueda binario | Desafío │ Solución |
Encuentra el ancestro común más bajo | Desafío │ Solución |
Invertir un árbol binario | Desafío │ Solución |
Implementar un árbol de búsqueda binario | Desafío │ Solución |
Implementar un montón mínimo | Desafío │ Solución |
Implementar un intento | Desafío │ Solución |
Implementar búsqueda en profundidad en un gráfico | Desafío │ Solución |
Implementar búsqueda en amplitud en un gráfico | Desafío │ Solución |
Determinar si hay un camino entre dos nodos en un gráfico | Desafío │ Solución |
Implementar un gráfico | Desafío │ Solución |
Encuentre un orden de compilación dada una lista de proyectos y dependencias. | Desafío │ Solución |
Encuentre el camino más corto en un gráfico ponderado. | Desafío │ Solución |
Encuentra el camino más corto en un gráfico no ponderado. | Desafío │ Solución |
Añadir un desafío | Contribuir │ Contribuir |
Desafío | Cuadernos estáticos |
---|---|
Implementar clasificación de selección | Desafío │ Solución |
Implementar ordenación por inserción | Desafío │ Solución |
Implementar clasificación rápida | Desafío │ Solución |
Implementar clasificación por fusión | Desafío │ Solución |
Implementar clasificación por base | Desafío │ Solución |
Ordene una serie de cadenas para que todos los anagramas estén uno al lado del otro | Desafío │ Solución |
Encuentre un elemento en una matriz ordenada y rotada | Desafío │ Solución |
Buscar una matriz ordenada para un artículo | Desafío │ Solución |
Encuentra un int que no esté en una entrada de n enteros | Desafío │ Solución |
Dadas las matrices ordenadas A, B, combine B en A en orden ordenado | Desafío │ Solución |
Implementar una clasificación de selección estable | Contribuir │ Contribuir |
Hacer estable un tipo inestable | Contribuir │ Contribuir |
Implementar una versión eficiente e implementada de Quicksort | Contribuir │ Contribuir |
Dadas dos matrices ordenadas, combine una con la otra en orden ordenado | Contribuir │ Contribuir |
Encuentre un elemento en una matriz de números enteros rotada y ordenada | Contribuir │ Contribuir |
Añadir un desafío | Contribuir │ Contribuir |
Desafío | Cuadernos estáticos |
---|---|
Implementar Fibonacci de forma recursiva, dinámica e iterativa. | Desafío │ Solución |
Maximizar los artículos colocados en una mochila. | Desafío │ Solución |
Maximice los artículos ilimitados colocados en una mochila | Desafío │ Solución |
Encuentra la subsecuencia común más larga. | Desafío │ Solución |
Encuentra la subsecuencia creciente más larga. | Desafío │ Solución |
Minimizar el costo de la multiplicación de matrices. | Desafío │ Solución |
Maximizar los precios de las acciones dadas k transacciones | Desafío │ Solución |
Encuentre el número mínimo de formas de representar n centavos dada una serie de monedas | Desafío │ Solución |
Encuentre el número único de formas de representar n centavos dada una serie de monedas | Desafío │ Solución |
Imprima todas las combinaciones válidas de n pares de paréntesis | Desafío │ Solución |
Navegar por un laberinto | Desafío │ Solución |
Imprimir todos los subconjuntos de un conjunto | Desafío │ Solución |
Imprimir todas las permutaciones de una cadena. | Desafío │ Solución |
Encuentra el índice mágico en una matriz. | Desafío │ Solución |
Encuentra el número de formas de subir n pasos | Desafío │ Solución |
Implementar las Torres de Hanoi con 3 torres y N discos | Desafío │ Solución |
Implementar factorial de forma recursiva, dinámica e iterativa. | Contribuir │ Contribuir |
Realizar una búsqueda binaria en una matriz ordenada de números enteros | Contribuir │ Contribuir |
Imprimir todas las combinaciones de una cadena. | Contribuir │ Contribuir |
Implementar una función de relleno de pintura. | Contribuir │ Contribuir |
Encuentre todas las permutaciones para representar n centavos, dadas monedas de 1, 5, 10, 25 centavos | Contribuir │ Contribuir |
Añadir un desafío | Contribuir │ Contribuir |
Desafío | Cuadernos estáticos |
---|---|
Generar una lista de números primos | Desafío │ Solución |
Encuentra la raíz digital | Desafío │ Solución |
Cree una clase que admita el modo inserción, máximo, mínimo, media en O(1) | Desafío │ Solución |
Determinar si un número es potencia de dos. | Desafío │ Solución |
Suma dos números sin el signo + o - | Desafío │ Solución |
Restar dos números sin el signo + o - | Desafío │ Solución |
Comprobar si un número es primo | Contribuir │ Contribuir |
Determinar si dos rectas en un plano cartesiano se cruzan | Contribuir │ Contribuir |
Usando solo sumar, implementar multiplicar, restar y dividir para enteros | Contribuir │ Contribuir |
Encuentre el k-ésimo número tal que los únicos factores primos sean 3, 5 y 7 | Contribuir │ Contribuir |
Añade un desafío | Contribuir │ Contribuir |
Desafío | Cuadernos estáticos |
---|---|
Implementar operaciones comunes de manipulación de bits. | Desafío │ Solución |
Determinar el número de bits a voltear para convertir a en b | Desafío │ Solución |
Dibuja una línea en una pantalla. | Desafío │ Solución |
Voltee un poco para maximizar la secuencia más larga de 1 | Desafío │ Solución |
Obtenga el siguiente número más grande y el siguiente más pequeño | Desafío │ Solución |
Fusionar dos números binarios | Desafío │ Solución |
Intercambiar bits pares e impares en un número entero | Desafío │ Solución |
Imprime la representación binaria de un número entre 0 y 1 | Desafío │ Solución |
Determinar el número de unos en la representación binaria de un número entero dado. | Contribuir │ Contribuir |
Añadir un desafío | Contribuir │ Contribuir |
Desafío | Cuadernos estáticos |
---|---|
Encuentre la subcadena más larga con como máximo k caracteres distintos | Desafío │ Solución |
Encuentra el producto más alto de tres números. | Desafío │ Solución |
Maximice las ganancias de las acciones con 1 compra y 1 venta | Desafío │ Solución |
Mover todos los ceros de una lista al final | Desafío │ Solución |
Encuentra los productos de cada otro int. | Desafío │ Solución |
Dada una lista de entradas y salidas, encuentre el período de mayor actividad. | Desafío │ Solución |
Determinar el perímetro de una isla. | Desafío │ Solución |
Formatear claves de licencia | Desafío │ Solución |
Encuentre la ruta de archivo absoluta más larga | Desafío │ Solución |
Fusionar rangos de tuplas | Desafío │ Solución |
Asignar cookies | Desafío │ Solución |
Determina si puedes ganar en Nim | Desafío │ Solución |
Compruebe si se podría haber utilizado una revista para crear una nota de rescate | Desafío │ Solución |
Encuentra la cantidad de veces que cabe una oración en una pantalla | Desafío │ Solución |
árbol utópico | Desafío │ Solución |
Maximizando xor | Desafío │ Solución |
Añadir un desafío | Contribuir │ Contribuir |
interactive-coding-challenges # Repo
├─ arrays_strings # Category of challenges
│ ├─ rotation # Challenge folder
│ │ ├─ rotation_challenge.ipynb # Challenge notebook
│ │ ├─ rotation_solution.ipynb # Solution notebook
│ │ ├─ test_rotation.py # Unit test*
│ ├─ compress
│ │ ├─ compress_challenge.ipynb
│ │ ├─ compress_solution.ipynb
│ │ ├─ test_compress.py
│ ├─ ...
├─ linked_lists
│ ├─ palindrome
│ │ └─ ...
│ ├─ ...
├─ ...
*Los cuadernos (.ipynb) leen/escriben el archivo de prueba unitaria asociado (.py).
Este README contiene enlaces a Binder, que aloja cuadernos dinámicos del contenido del repositorio en línea sin necesidad de instalación.
Correr:
pip install jupyter
Para obtener instrucciones detalladas, scripts y herramientas para configurar de manera más óptima su entorno de desarrollo, consulte el repositorio dev-setup.
Para obtener más detalles sobre la instalación de la computadora portátil, siga las instrucciones aquí.
Puede encontrar más información sobre IPython/Jupyter Notebooks aquí.
Los desafíos se proporcionan en forma de cuadernos IPython/Jupyter y se han probado con Python 2.7 y Python 3.x.
Si necesita instalar IPython/Jupyter Notebook, consulte la sección Instalación de Notebook.
Ejecute el cuaderno de desafíos:
$ git clone https://github.com/donnemartin/interactive-coding-challenges.git
$ cd interactive-coding-challenges
$ jupyter notebook
Esto iniciará su navegador web con la lista de categorías de desafíos:
Para depurar su solución con pdb, consulte el siguiente ticket.
Nota: Si su solución es diferente de las que figuran en el Cuaderno de soluciones, considere enviar una solicitud de extracción para que otros puedan beneficiarse de su trabajo. Revise las Pautas de contribución para obtener más detalles.
Los desafíos, soluciones y pruebas unitarias se presentan en forma de cuadernos IPython/Jupyter .
¡Las contribuciones son bienvenidas!
Revise las Pautas de contribución para obtener detalles sobre cómo:
No dude en ponerse en contacto conmigo para discutir cualquier problema, pregunta o comentario.
Mi información de contacto se puede encontrar en mi página de GitHub.
Le proporciono código y recursos en este repositorio bajo una licencia de código abierto. Debido a que este es mi repositorio personal, la licencia que recibe para mi código y mis recursos es mía y no de mi empleador (Facebook).
Copyright 2015 Donne Martin
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.