Recomendado para leer en línea (el acceso a Github suele ser inestable en el país)
Sincronización recomendada de Gitee
- Introducción : Este proyecto es un conjunto completo de planes de prueba, diseñado para ayudar a todos a evitar desvíos, aprender algoritmos paso a paso y seguir al autor.
- Publicado oficialmente : "Code Thoughts".
- Versión PDF : Versión PDF de "Code Random Notes" sobre algoritmos.
- Clase abierta de algoritmo : clase abierta de vídeo del algoritmo "Code Random Record".
- El ensayo más sólido de ocho partes : Pensamientos aleatorios sobre el código que registra la esencia del planeta del conocimiento PDF.
- El orden de respuesta de las preguntas : El archivo README ha organizado el orden de respuesta de las preguntas. Puede responderlas una por una en orden.
- Comunidad de aprendizaje : Aprendan juntos sobre check-in/habilidades para entrevistas/cómo elegir una oferta/recomendaciones de grandes empresas/reglas del lugar de trabajo/modificación del currículum vitae/compartir tecnología/vida del programa. Bienvenido a unirse al planeta del conocimiento "Code Caprice".
- Enviar código : este proyecto utiliza el lenguaje C++ para explicar, pero ya existen versiones en varios idiomas, como Java, Python, Go, JavaScript, etc. Gracias a todos los contribuyentes aquí si también desean contribuir con código para iluminar su avatar. , haga clic en Aprenda cómo enviar su código aquí.
- Nota para la reimpresión : Todos los artículos siguientes son trabajos originales míos (el programador Carl). Indique la fuente al citar artículos de este proyecto. Si encuentra plagio o transferencia maliciosa, utilizará armas legales para proteger sus derechos e intereses. ¡Mantengamos juntos un buen entorno de creación técnica!
Guía de cepillado de preguntas de LeetCode
Antecedentes de la guía de cepillado de preguntas.
Muchos estudiantes que acaban de empezar a responder preguntas tienen una confusión: frente a casi 2000 preguntas en leetcode, dónde empezar.
Todos sienten que la eficiencia de responder preguntas es ineficiente y el tiempo se pierde principalmente en tres puntos:
- encontrar preguntas
- Encontré una pregunta que no debería hacerse en esta etapa.
- No existe un conjunto completo de soluciones de problemas de alta calidad como referencia.
De hecho, he respondido esta pregunta antes en Zhihu. La respuesta es aproximadamente la siguiente: matriz-> lista vinculada-> tabla hash-> cadena-> pila y cola-> árbol-> retroceso-> codicioso-> Programación dinámica-. > Teoría de grafos -> Estructuras de datos avanzadas, luego comience con las simples y, después de hacer algunos tipos de preguntas, pase gradualmente a preguntas medianas y difíciles.
Pero puedo ponerme en mi lugar y sentir: incluso con un plan tan general, es muy difícil para un principiante o incluso un veterano en algoritmos encontrar un tema que le convenga. El costo de tiempo es muy alto y el tema no. necesariamente un tema clásico.
Cuando se trata de responder preguntas, todos queremos aprovechar el menor tiempo posible para responder todas las preguntas clásicas en un orden de dificultad paso a paso , ¡para que la eficiencia sea la más alta!
Así que compilé una guía para aclarar las preguntas de Leetcode: un orden súper detallado para responder las preguntas. Cada pregunta es cuidadosamente seleccionada por mí. Todas son preguntas de entrevistas clásicas y de alta frecuencia . Solo debes seguir este orden . El archivo README ha organizado el orden de las preguntas, ¡y el orden de los artículos es el orden de respuesta de las preguntas! Simplemente cepillalos uno por uno, ¡no tienes que pasar por un mar de preguntas y elegir los temas tú mismo!
Además, he escrito soluciones detalladas para cada pregunta (con imágenes, textos y videos sobre puntos difíciles) y mis soluciones están enumeradas en la página de inicio de las preguntas correspondientes. La calidad es obvia para todos.
¡Así que ahora he ordenado el orden de respuesta de las preguntas para ayudar a más estudiantes que están aprendiendo algoritmos a evitar desvíos!
Si está repasando Leetcode, se recomienda encarecidamente que siga el orden de resolución de las preguntas de esta guía. Después de terminar de repasar, encontrará que ha dado un salto cualitativo en todo el sistema de conocimiento y no necesita buscar. Direcciones en el mar de preguntas.
Los últimos artículos se publicarán primero en la cuenta pública "Code Caprice". Escanee el código para echarle un vistazo y descubrirá que es demasiado tarde para conocerlo.
Cómo utilizar esta guía de prueba
De acuerdo con el orden de disposición mencionado anteriormente, simplemente comience a cepillarse desde la matriz. El orden ya está organizado, así que simplemente cepille en orden.
En la guía de preguntas, cada tema tiene un capítulo de base teórica al principio. No es como una introducción teórica similar a un libro de texto, sino un resumen de los conocimientos básicos necesarios en el combate real. Hay un resumen al final de cada tema, que es el resumen más completo del tema.
Si es un veterano de los algoritmos, esta guía también es el mejor material para revisar. Si lee rápidamente el resumen de cada serie, le vendrá a la mente todo el sistema de conocimiento de algoritmos y varias soluciones.
Cada solución aquí es una obra maestra y merece una cuidadosa consideración .
Utilizo C ++ de manera uniforme en las explicaciones de problemas, pero encontrará que casi todas las explicaciones de problemas a continuación están equipadas con otras versiones de lenguaje, como Java, Python, Go, JavaScript, etc. Por supuesto, es el código aportado por estos chicos entusiastas. También controlaré estrictamente la calidad del código.
Por lo tanto, todos son bienvenidos a participar, mejorar las versiones en varios idiomas de las soluciones al problema, adoptar el código abierto y beneficiar a más amigos .
¿Estás listo? Comencemos la guía del cuestionario, ¡vamos, vamos!
Prefacio
formación
- Las matrices son demasiado simples, ¡pero deberías saber esto!
- Matriz: 704.Búsqueda binaria
- Matriz: 27. Eliminar elementos
- Matriz: 977. Cuadrado de matriz ordenada
- Matriz: 209. Submatriz con longitud mínima
- Matriz: suma de rango
- Matriz: Desarrollador compra terreno
- Matriz: 59. Matriz Espiral II
- Matrices: resumen
lista enlazada
- ¡Esto es lo que debes saber sobre las listas enlazadas!
- Lista vinculada: 203. Eliminar elementos de la lista vinculada
- Lista enlazada: 707. Diseño de lista enlazada
- Lista enlazada: 206. Voltear la lista enlazada
- Lista vinculada: 24. Intercambie nodos en la lista vinculada por pares
- Lista vinculada: 19. Elimine el enésimo nodo de la parte inferior de la lista vinculada
- Lista vinculada: la lista vinculada se cruza
- Lista enlazada: 142. Lista enlazada circular
- Lista enlazada: ¡Resumen!
tabla hash
- ¡Lo que debes saber sobre las tablas hash!
- Tabla hash: 242. Anagramas válidos
- Tabla hash: 1002. Encuentra caracteres comunes
- Tabla hash: 349. Intersección de dos matrices
- Tabla hash: 202.Número feliz
- Tabla hash: 1. Suma de dos números
- Tabla hash: 454. Suma de cuatro números II
- Tabla hash: 383. Carta de rescate
- Tabla hash: 15. Suma de tres números
- Método de dos punteros: 18. Suma de cuatro números
- Tabla hash: ¡resumen!
cadena
- Cadena: 344. Cadena inversa
- Cuerda: 541. Cuerda inversa II
- Cadena: reemplazar números
- Cadena: 151. Voltear las palabras en la cadena.
- Cuerda: cuerda para diestros
- Ayudarle a aprender a fondo el algoritmo KMP
- Cadena: 459. Subcadena repetida
- Cadena: ¡Resumen!
método de doble puntero
El método del doble puntero se aplica básicamente a problemas con matrices, cadenas y listas enlazadas.
- Matriz: 27. Eliminar elementos
- Cadena: 344. Cadena inversa
- Cadena: reemplazar números
- Cadena: 151. Voltear las palabras en la cadena.
- Lista enlazada: 206. Voltear la lista enlazada
- Lista vinculada: 19. Elimine el enésimo nodo de la parte inferior de la lista vinculada
- Lista vinculada: la lista vinculada se cruza
- Lista enlazada: 142. Lista enlazada circular
- Doble puntero: 15. Suma de tres números
- Punteros dobles: 18. Suma de cuatro números
- Consejos dobles: ¡Resumen!
Pilas y colas
- Pilas y colas: conceptos básicos teóricos
- Pila y cola: 232. Utilice la pila para implementar la cola
- Pila y cola: 225. Utilice la cola para implementar la pila
- Pilas y colas: 20. Paréntesis válidos
- Pilas y colas: 1047. Eliminar todos los duplicados adyacentes en una cadena
- Pilas y colas: 150. Evaluación de expresiones polacas inversas
- Pilas y colas: 239. Ventana deslizante máxima
- Pila y cola: 347. Top K elementos de alta frecuencia
- Pilas y colas: ¡Resumen!
árbol binario
El esquema de clasificación de temas es el siguiente:
- ¡Esto es lo que debes saber sobre los árboles binarios!
- Árbol binario: recorrido recursivo del árbol binario
- Árbol binario: recorrido iterativo de un árbol binario
- Árbol binario: método de iteración unificado para árboles binarios
- Árbol binario: recorrido de orden de nivel de un árbol binario
- Árbol binario: 226. Voltear árbol binario
- Resumen de esta semana! (árbol binario)
- Árbol binario: 101. Árbol binario simétrico
- Árbol binario: 104. La profundidad máxima de un árbol binario
- Árbol binario: 111. Profundidad mínima del árbol binario
- Árbol binario: 222. El número de nodos en un árbol binario completo.
- Árbol binario: 110. Árbol binario equilibrado
- Árbol binario: 257. Todos los caminos del árbol binario
- ¡Terminando esta semana! (árbol binario)
- Árbol binario: 404. Suma de hojas izquierdas
- Árbol binario: 513. Encuentra el valor en la esquina inferior izquierda del árbol.
- Árbol binario: 112. Suma de ruta
- Árbol binario: 106. Construir un árbol binario
- Árbol binario: 654. Árbol binario máximo
- Resumen de esta semana! (árbol binario)
- Árbol binario: 617. Fusionar dos árboles binarios
- Árbol binario: 700. ¡Aparece el árbol de búsqueda binaria!
- Árbol binario: 98. Verificar árbol de búsqueda binaria
- Árbol binario: 530. Diferencia absoluta mínima del árbol de búsqueda
- Árbol binario: 501. Modo en árbol de búsqueda binaria
- Árbol binario: 236. Problema de los ancestros comunes
- Resumen de esta semana! (árbol binario)
- Árbol binario: 235. Busque el ancestro común más cercano del árbol
- Árbol binario: 701. Operación de inserción en el árbol de búsqueda
- Árbol binario: 450. Operación de eliminación en el árbol de búsqueda.
- Árbol binario: 669. Poda del árbol de búsqueda binaria
- Árbol binario: 108. Convertir una matriz ordenada en un árbol de búsqueda binario
- Árbol binario: 538. Convertir árbol de búsqueda binario en árbol acumulativo
- Árbol binario: ¡Resumen! (Todas las habilidades del árbol binario que necesitas dominar están aquí)
Algoritmo de retroceso
El esquema de clasificación de temas es el siguiente:
- ¡Esto es lo que debe saber sobre los algoritmos de retroceso!
- Algoritmo de retroceso: 77. Combinación
- Algoritmo de retroceso: 77. Optimización combinatoria
- Algoritmo de retroceso: 216. Suma combinatoria III
- Algoritmo de retroceso: 17. Combinación alfabética de números de teléfono
- Resumen de esta semana! (Algoritmo de retroceso serie uno)
- Algoritmo de retroceso: 39. Suma combinatoria
- Algoritmo de retroceso: 40. Suma combinatoria II
- Algoritmo de retroceso: 131. Cadena de palíndromo dividida
- Algoritmo de retroceso: 93. Restaurar dirección IP
- Algoritmo de retroceso: 78.Subconjunto
- Resumen de esta semana! (Algoritmo de retroceso serie 2)
- Algoritmo de retroceso: 90. Subconjunto II
- Algoritmo de retroceso: 491. Subsecuencia creciente
- Algoritmo de retroceso: 46. Permutación completa
- Algoritmo de retroceso: 47. Permutación total II
- Resumen de esta semana! (Algoritmo de retroceso serie tres)
- Otra forma de escribir el algoritmo de retroceso para eliminar duplicados
- Algoritmo de retroceso: 332. Reorganizar itinerario
- Algoritmo de retroceso: 51.N Reina
- Algoritmo de retroceso: 37. Resolver Sudoku
- Resumen del algoritmo de retroceso
algoritmo codicioso
El esquema de clasificación de temas es el siguiente:
- ¡Lo que debes saber sobre los algoritmos codiciosos!
- Algoritmo codicioso: 455. Distribuir cookies
- Algoritmo codicioso: 376. Secuencia de swing
- Algoritmo codicioso: 53. Suma máxima de subsecuencia
- Resumen de esta semana! (Algoritmo codicioso Serie 1)
- Algoritmo codicioso: 122. Mejor momento para comprar y vender acciones II
- Algoritmo codicioso: 55. Juego de salto
- Algoritmo codicioso: 45. Juego de salto II
- Algoritmo codicioso: suma de matriz maximizada después de 1005.K negaciones
- Resumen de esta semana! (Algoritmo codicioso Serie 2)
- Algoritmo codicioso: 134. Gasolinera
- Algoritmo codicioso: 135. Distribuir dulces
- Algoritmo codicioso: 860. Cambio de limonada
- Algoritmo codicioso: 406. Reconstruir la cola según la altura
- Resumen de esta semana! (Algoritmo codicioso Serie 3)
- Algoritmo codicioso: 406. Reconstruir cola según la altura (secuela)
- Algoritmo codicioso: 452. Detona el globo con el mínimo número de flechas.
- Algoritmo codicioso: 435. Sin intervalos superpuestos
- Algoritmo codicioso: 763. Dividir intervalos de letras
- Algoritmo codicioso: 56. Intervalos de fusión
- Resumen de esta semana! (Algoritmo codicioso Serie 4)
- Algoritmo codicioso: 738. Números que aumentan monótonamente
- Algoritmo codicioso: 968. Monitorear árbol binario
- Algoritmo codicioso: ¡Resumen! (Cada resumen debe ser clásico)
programación dinámica
El tema de la programación dinámica ya empezó, no hay tiempo para explicaciones, amigos, ¡súbanse al autobús y no se queden atrás!
- ¡Lo que debes saber sobre la programación dinámica!
- Programación dinámica: 509. Números de Fibonacci
- Programación dinámica: 70. Subir escaleras
- Programación dinámica: 746. Subir escaleras con coste mínimo
- Resumen de esta semana! (Serie de Planificación Dinámica 1)
- Programación dinámica: 62. Diferentes caminos
- Programación dinámica: 63. Diferentes caminos II
- Programación dinámica: 343. División de enteros
- Programación dinámica: 96. Diferentes árboles de búsqueda binaria
- Resumen de esta semana! (Programación dinámica Serie 2)
Serie de problemas de mochila:
- Programación dinámica: 01 Fundamentos teóricos de la mochila
- Programación dinámica: 01 Fundamentos teóricos de la mochila (rolling array)
- Programación dinámica: 416. Partición de subconjuntos de Equisum
- Programación Dinámica: 1049. El peso de la última piedra II
- Resumen de esta semana! (Serie de Planificación Dinámica 3)
- Programación dinámica: 494. Meta y
- Programación dinámica: 474. Unos y ceros
- Programación dinámica: resumen completo de la mochila
- Programación dinámica: 518. Intercambio de cambios II
- Resumen de esta semana! (Programación dinámica Serie 4)
- Programación dinámica: 377. Suma combinatoria IV
- Programación dinámica: 70. Subir escaleras (versión completa para mochileros)
- Programación dinámica: 322. Intercambio de cambios.
- Programación dinámica: 279. Números cuadrados perfectos
- Resumen de esta semana! (Programación dinámica Serie 5)
- Programación dinámica: 139. División de palabras
- Programación dinámica: base teórica de múltiples mochilas
- Resumen del problema de la mochila
Serie de robos:
- Programación dinámica: 198. Robo
- Programación Dinámica: 213. Robo II
- Programación Dinámica: 337. Robo III
Serie de valores:
- Programación dinámica: 121. Mejor momento para comprar y vender acciones
- Programación dinámica: resumen de esta semana (Serie 6)
- Programación Dinámica: 122. Mejores momentos para comprar y vender acciones II
- Programación Dinámica: 123. Mejor momento para comprar y vender acciones III
- Programación dinámica: 188. Mejor momento para comprar y vender acciones IV
- Programación dinámica: 309. El mejor momento para comprar y vender acciones incluye el período de congelación
- Programación dinámica: resumen de esta semana (Serie 7)
- Programación dinámica: 714. El mejor momento para comprar y vender acciones, incluidas las tarifas de gestión
- Programación dinámica: resumen de series de acciones
Serie de subsecuencia:
- Programación dinámica: 300. Subsecuencia creciente más larga
- Programación dinámica: 674. Secuencia creciente continua más larga
- Programación dinámica: 718. Subarreglo repetido más largo
- Programación dinámica: 1143. Subsecuencia común más larga
- Programación dinámica: 1035. Líneas disjuntas
- Programación dinámica: 53. Suma máxima de subsecuencia
- Programación dinámica: 392. Determinación de subsecuencias
- Programación Dinámica: 115. Diferentes subsecuencias
- Programación dinámica: 583. Operación de eliminación de dos cadenas.
- Programación dinámica: 72. Editar distancia
- Editar resumen de distancia
- Programación dinámica: 647. Subcadena palíndromo
- Programación dinámica: 516. Subsecuencia palíndromo más larga
- Resumen de programación dinámica.
pila monótona
- Pila monótona: 739. Temperatura diaria
- Pila monótona: 496. Siguiente elemento más grande I
- Pila monótona: 503. Siguiente elemento más grande II
- Pila monótona: 42. Atrapando agua de lluvia
- Pila monótona: 84. Rectángulo más grande en el histograma
teoría de grafos
Teoría de grafos lanzada oficialmente
- Teoría de grafos: fundamentos teóricos
- Teoría de grafos: base teórica de la búsqueda en profundidad
- Teoría de grafos: todos los caminos accesibles
- Teoría de grafos: base teórica de la búsqueda en amplitud
- Teoría de grafos: número de islas Versión de búsqueda profunda.
- Teoría de grafos: número de islas.
- Teoría de grafos: área máxima de una isla
- Teoría de grafos: Área total de la isla
- Teoría de grafos: la isla hundida
- Teoría de grafos: problema del flujo de agua
- Teoría de grafos: construcción de la isla más grande
- Teoría de grafos: solitario de cuerdas
- Teoría de grafos: accesibilidad completa de gráficos dirigidos
- Teoría de grafos: perímetro de una isla
- Teoría de grafos: conceptos básicos de la teoría de la búsqueda de sindicatos
- Teoría de grafos: encontrar caminos hacia la existencia
- Teoría de grafos: conexiones redundantes
- Teoría de grafos: conexiones redundantes II
- Teoría de grafos: prima del árbol de expansión mínima
- Teoría de grafos: kruskal del árbol de expansión mínima
- Teoría de grafos: clasificación topológica
- Teoría de grafos: dijkstra (versión ingenua)
- Teoría de grafos: dijkstra (versión optimizada para montón)
- Teoría de grafos: algoritmo Bellman_ford
- Teoría de grafos: algoritmo de optimización de colas Bellman_ford (también conocido como SPFA)
- Teoría de grafos: bucle de peso negativo del juicio de Bellman_ford
- Teoría de grafos: el camino más corto finito de fuente única de Bellman_ford
- Teoría de grafos: algoritmo de Floyd
- Teoría de grafos: algoritmo A*
- Teoría de grafos: resumen del algoritmo de ruta más corta
- Teoría de grafos: resumen de la teoría de grafos
(Actualizándose continuamente...)
Clasificación de los diez primeros
teoría de números
Preguntas clásicas sobre estructura de datos avanzada
- Y busca en la colección.
- árbol de expansión mínimo
- Árbol de segmentos
- conjunto de árboles
- árbol de diccionario
Procesamiento masivo de datos
Preguntas complementarias
Las preguntas anteriores son la máxima prioridad. Debe estudiarlas al menos dos veces para comprenderlas completamente. Si domina las preguntas anteriores y todavía está buscando otras preguntas para practicar, puede estudiar las siguientes preguntas nuevamente:
Estas preguntas son muy buenas, pero algunas de ellas son similares a la guía de preguntas sobre cepillado, y algunas de las soluciones a los problemas se complementarán más adelante, por lo que no las he incluido en la guía de preguntas sobre cepillado. Mejoraré algunas de las soluciones de problemas en el futuro y luego las incorporaré a la estrategia de resolución de problemas.
formación
- 1365. ¿Cuántos números hay que son menores que el número actual?
- 941. Conjunto de montaña válido (doble puntero)
- 1207. Aplicación clásica de una variedad única de ocurrencias en hash
- 283. Mover cero [matriz] [puntero doble]
- 189. Girar matriz
- 724.Encontrar el índice central de una matriz
- 34. Encuentre la primera y última posición de un elemento en una matriz ordenada (método de bisección)
- 922. Ordenar matriz por pares e impares II
- 35.Buscar posición de inserción
lista enlazada
- 24. Intercambie nodos en la lista vinculada por pares
- 234. Lista enlazada de palíndromo
- 143. Reorganizar la lista vinculada [matriz] [cola bidireccional] [operar directamente la lista vinculada]
- 141. Lista circular enlazada
- 160. Listas enlazadas intersecadas
tabla hash
- 205. Cadenas isomórficas: [Aplicación de tablas hash]
cadena
- 925. Pulsación larga para simular coincidencia
- 0844. Comparar cadenas que contienen retroceso [simulación de pila] [punteros dobles con mejor espacio]
árbol binario
- 129. Encuentra la suma de números desde los nodos raíz hasta los nodos hoja.
- 1382. Convierta el árbol de búsqueda binario para equilibrarlo y construya un árbol de búsqueda binario equilibrado
- 100. El mismo árbol tiene la misma idea que 101. Árbol binario simétrico
- 116. Complete el siguiente puntero del nodo derecho de cada nodo
Algoritmo de retroceso
avaro
- 649.El Senado de Dota2 es difícil
- 1221. Dividir personajes equilibrados es simple y codicioso.
programación dinámica
- 5. La subcadena palíndromo más larga es casi la misma que la subcadena 647. palíndromo.
- 132. La cadena de palíndromo dividida II es muy similar a 647. Subcadena de palíndromo y 5. Subcadena de palíndromo más larga
- 673. El número de subsecuencias crecientes más largas.
teoría de grafos
- 463.Perímetro de isla (simulación)
- 841. Se pueden utilizar llaves y habitaciones [gráfico dirigido] dfs, bfs
- 127. Solitario de palabras Guangsou
Y busca en la colección.
- 684.Conexión redundante [Preguntas básicas sobre búsqueda combinada]
- 685. Conexión redundante II [Aplicación de búsqueda de unión]
simulación
- 657.¿Puede el robot volver al origen?
- 31.Próximo arreglo
Operaciones de bits
- 1356. Ordenar según el número de unos en el sistema binario digital
plantilla de algoritmo
Varias plantillas de algoritmos básicos
Contribuyente
Haga clic aquí para ver todos los colaboradores de LeetCode-Master. Gracias a ellos por complementar las versiones de LeetCode-Master en otros idiomas para que más lectores puedan beneficiarse de este proyecto.
Tendencias estrella
Sobre el autor
Hola a todos, soy el programador Carl, miembro principal del Instituto de Tecnología de Harbin y autor de "Code Captions". He estado involucrado en la investigación y el desarrollo de tecnologías back-end subyacentes en Tencent y Baidu.
descargar PDF
Agregue la siguiente cuenta corporativa de WeChat y la versión PDF se enviará automáticamente a todos. También puede elegir si desea unirse al grupo de respuesta a preguntas.
Recuerde tomar nota al agregar WeChat. Si ya está trabajando, tenga en cuenta: nombre-ciudad-posición. Si es estudiante, tenga en cuenta: nombre-escuela-grado. Nota: Si no te presentas, no podrás aprobar.