¿Cómo puedo mejorar mis habilidades de codificación algorítmica (básica)? Conozco C ++ y he tomado el curso de algoritmos en Coursera.

Saber lo básico del lenguaje y los algoritmos es genial, pero a menos que practiques, será muy difícil codificarlo.

Cuando empieces a practicar, sabrás cómo reunir 1 y 1 para que sea 2.

Comience con preguntas simples y codifíquelas usted mismo. Luego pasa a las preguntas con mayor nivel de dificultad.

Lea una pregunta, piense en cómo abordar el problema. Puede ser la solución más ingenua, pero aún así codificarla. Si puede codificarlo y probarlo bien, entonces piense en una mejor solución. En caso de que no pueda pensar en una solución mejor, busque una solución en Internet, pero no mire el código. Ir a través del algoritmo. Ahora, si lo entiendes, intenta codificarlo tú mismo. Si le resulta difícil codificar, entonces solo mire el código. Después de eso intenta codificarlo tú mismo.

Practica más y más preguntas. No se rinda si al principio puede resolver el problema de manera eficiente usted mismo.

Intente resolver las preguntas de entrevista popular sobre arrays, programación dinámica, árboles, gráficos, etc.

Puedes intentar resolver los problemas dados aquí: IDeserve

Si no puede resolver algún problema, consulte los Algoritmos / Información en la página para obtener una pista sobre la solución. Si necesita más ayuda sobre el problema, probablemente encontrará un video sobre la solución. Muchas de las páginas tienen una solución de video en la que se discute el algoritmo con ejemplos. Por último, puedes echar un vistazo al código. Aunque el código está en Java, podrá escribir código c ++ similar si tiene conocimientos básicos de Java.

Puedes comenzar con esta lista de reproducción:

Youtube – Preguntas de la entrevista de programación

Éstos son algunos de los buenos problemas que puede probar:

Listas enlazadas y problemas de pila:

Fusionar dos listas enlazadas ordenadas

Invertir una lista enlazada – Recursiva

Invertir una lista enlazada – Iterativa

Invierta todos los nodos k alternativos de una lista enlazada

Encuentre el nth Node desde el final de una lista enlazada

Suma de dos listas vinculadas usando pilas

Suma de dos listas vinculadas utilizando Recursión | Serie 1

Implementación de caché LRU

Detecta un bucle en una lista enlazada y encuentra el nodo donde comienza el bucle.

Convertir una lista ordenada de enlace doble en un árbol de búsqueda binaria equilibrada

Convertir un árbol binario en una lista doblemente enlazada

Encuentra la intersección de dos listas vinculadas

Encuentre la intersección de dos listas vinculadas: O (m + n) Complejidad de tiempo y O (1) Complejidad de espacio

Pila Mínima O (1)

Problemas con las cuerdas:

Invertir palabras en una cadena

Eliminar espacios de una cadena dada

Subcadena más larga con caracteres que no se repiten

Compruebe paréntesis equilibrados en una cadena

Evaluación de Expresión Postfix

Agrupe todos los anagramas de una determinada serie de cadenas | Serie 1

Primer carácter no repetitivo en una cadena.

Encuentra todas las permutaciones de una cadena

Problema de ruptura de palabras

Subconjunto del problema de suma

Palíndromo más corto

Palindrome Min Cut

Número mínimo de intentos para llegar desde la palabra de origen a la palabra de destino

La subcadena palindrómica más larga

Algoritmo de Manacher

Secuencia palindrómica más larga

La subcadena común más larga

La subsecuencia común más larga

Para imprimir el número máximo de Como usando cuatro claves dadas.

Encontrar secuencias de ADN repetidas de 10 letras.

Encuentra la distancia de edición mínima entre dos cadenas dadas

Distintas cadenas binarias de longitud n sin 1s consecutivos

El cálculo de matriz de sufijo de prefijo más largo en el algoritmo de coincidencia de patrones KMP.

El algoritmo de Knuth Morris Pratt para la comparación de patrones.

Arreglos de problemas:

Algoritmo de clasificación – Selección de selección

Algoritmo de clasificación – Ordenación por inserción

Algoritmo de clasificación – Bubble Sort

Fusionar clasificación

Clasificación de panqueques

Algoritmo de clasificación – Ordenación de pila

Girar una matriz

Número de Fibonacci

Combina dos matrices ordenadas sin usar espacio adicional

Suma máxima de subarreglos

Subarreglo promedio máximo de tamaño k

Subcadena más larga con caracteres que no se repiten

Líderes en una matriz

Encontrar la longitud mínima de sub array con suma K

Búsqueda binaria en una matriz ordenada

Busca una matriz ordenada

Reorganizar los elementos en una matriz para poner los elementos positivos y negativos en orden alterno

Encuentra el siguiente número mayor usando los mismos dígitos

Siguiente elemento mayor en una matriz

Primer carácter no repetitivo en una cadena.

Encuentra el ‘n’ número más frecuente en la matriz

Encuentra el número que falta en la secuencia creciente

Encontrar duplicados en una matriz entera

Encuentra elementos comunes en ‘n’ arreglos ordenados

Encuentra un elemento pico en una matriz

Distribuir problema de chocolates

Contar las frecuencias de los elementos de la matriz en el rango de 1 a n

Encuentra todas las permutaciones de una cadena

Encuentra pivote en una matriz rotada ordenada

Encuentra un elemento en una matriz rotada ordenada

Encuentre el elemento en la matriz rotada clasificada sin encontrar pivote

Compra y venta de acciones | Parte 2

Compra y venta de acciones | Parte 1

Encuentra el índice de 0 para reemplazar para obtener la secuencia continua más larga de 1s

O (n) enfoque de tiempo para encontrar el índice de 0 para reemplazar y obtener la secuencia continua más larga de 1s

Atrapando el agua de lluvia entre torres

El problema del horizonte

Número mínimo de monedas para hacer cambio.

Encuentra la ruta de costo mínimo en una matriz

Encuentra la longitud de la subsecuencia creciente más larga en una matriz

Secuencia creciente más larga O (n logn)

Encuentra la longitud de la subsecuencia bitónica más larga en una matriz

Dada una matriz con todos los elementos distintos, encuentre la longitud de la sub-matriz más larga que tiene elementos (no en ningún orden en particular) que podrían formar una secuencia contigua

Encuentre una matriz de enteros correspondiente a la cadena que especifica las transiciones de aumento y disminución

Problema de la mina de oro

Encuentra la mediana de dos matrices ordenadas

Encuentra el elemento mayoritario en una matriz

0-1 Problema de mochila

Contar todas las decodificaciones posibles de una secuencia de dígitos dada

Encuentra el número total de formas de hacer cambios usando un conjunto de monedas dado

Encuentra sub-secuencia creciente de longitud tres con producto máximo

Encuentra sub-secuencia creciente de longitud tres con producto máximo | Enfoque optimizado

Establecer problema de partición | Recursion

Establecer problema de partición | Programación dinámica

Problemas de árboles y gráficas:

Previa pedido de un árbol binario

Recorrido posterior de un árbol binario

En orden de travesía de un árbol binario

Nivel de árbol binario Orden transversal

Recorrido de orden de nivel espiral de un árbol binario | Serie 1

Imprimir la vista derecha de un árbol binario

Imprima todos los nodos de un árbol binario que no tengan hermanos

Imprimir todos los caminos de la raíz a la hoja de un árbol binario

Profundidad mínima de un árbol binario

Imprimir la vista izquierda de un árbol binario

Encuentra la suma de todas las hojas izquierdas de un árbol binario.

Encuentra la profundidad del nodo de hoja impar más profundo

Compruebe si un árbol binario es un árbol binario completo o no

Compruebe si un árbol binario está completo o no

Compruebe si dos nodos son primos en un árbol binario

Compruebe si dos árboles binarios son idénticos

Compruebe si todos los nodos internos de BST tienen un solo hijo sin árbol de construcción

Convertir el árbol n-ary dado a su imagen de espejo

Convertir un árbol binario a su árbol espejo.

Imprimir vista superior de un árbol binario

Imprima la vista superior de un árbol binario utilizando el orden de nivel transversal

Imprimir vista inferior de un árbol binario

Imprima la vista inferior de un árbol binario utilizando el orden de nivel transversal

Eliminar los nodos del árbol de búsqueda binario que están fuera del rango dado

Eliminar todos los nodos que se encuentran en la ruta con una suma menor que k

Eliminar todos los medios nodos de un árbol binario dado

Imprimir árbol binario en orden vertical

Rellenar vecinos correctos para todos los nodos en un árbol binario

El ancestro común más bajo de dos nodos en un árbol de búsqueda binario

Sucesor en orden de un nodo en un árbol binario

Recupere un árbol de búsqueda binario si se intercambian las posiciones de dos nodos.

Encuentre el piso y el techo de un elemento a partir del conjunto de datos dado utilizando el árbol de búsqueda binario

Suma diagonal de un árbol binario.

Crear un árbol de búsqueda binario equilibrado a partir de una matriz ordenada

Convertir una lista ordenada de enlace doble en un árbol de búsqueda binaria equilibrada

Convertir un árbol binario en una lista doblemente enlazada

Compruebe si un árbol binario está equilibrado o no

Compruebe si un árbol binario es un árbol de búsqueda binario

Compruebe si dos árboles de búsqueda binarios son idénticos dadas sus representaciones de matriz | Conjunto 2

Compruebe si dos árboles de búsqueda binarios son idénticos dadas sus representaciones de matriz

Compruebe si un árbol binario es un subárbol de otro árbol binario en el tiempo O (n)

Compruebe si un árbol binario es un subárbol de otro árbol binario en el espacio O (1)

Árbol binario de búsqueda | Inserción y Búsqueda

Árbol binario de búsqueda | Supresión

Compruebe si un árbol binario dado es un árbol simétrico o no

Compruebe si el árbol n-ario dado es un árbol simétrico o no

Número total de posibles árboles binarios de búsqueda con las teclas ‘n’

Encuentra el tamaño de BST más grande en un árbol binario

El ancestro común más bajo de 2 nodos en un árbol binario

Encuentre la altura del árbol binario de su representación matriz matriz

Convertir árbol binario a árbol binario de búsqueda

Construye el árbol binario a partir de su representación matriz matriz

Construir árbol binario a partir de recorridos inorder y preorder

Construir árbol binario a partir de recorridos inorder y postorder

Árbol AVL | Lo esencial

Árbol AVL | Inserción

Árbol AVL | Supresión

Estructura de datos Trie | Insertar y buscar

Estructura de datos Trie | Borrar

Ajuste de patrones utilizando Trie

Coincidencia de prefijos más larga utilizando Trie

Dada una secuencia de palabras, agrupa todos los anagramas e imprímelos.

Serializar y Deserializar un árbol binario de búsqueda

Serializar y deserializar un árbol de búsqueda binario utilizando el recorrido de orden posterior

Amplia primera búsqueda en una gráfica.

Clasificación topológica de una gráfica acíclica dirigida.

Número mínimo de intentos para llegar desde la palabra de origen a la palabra de destino

Problema de círculos de amigos – Teoría de grafos

El algoritmo de ruta más corta de Dijkstra

Algoritmo de Bellman-Ford

Problemas de programación dinámica:

Número de Fibonacci

Suma máxima de subarreglos

Problema de ruptura de palabras

Número total de posibles árboles binarios de búsqueda con las teclas ‘n’

Subconjunto del problema de suma

Palíndromo más corto

Palindrome Min Cut

Número mínimo de intentos para llegar desde la palabra de origen a la palabra de destino

Número mínimo de monedas para hacer cambio.

Encuentra la ruta de costo mínimo en una matriz

La subcadena palindrómica más larga

Secuencia palindrómica más larga

Encuentra la longitud de la subsecuencia creciente más larga en una matriz

Secuencia creciente más larga O (n logn)

La subcadena común más larga

La subsecuencia común más larga

Encuentra la longitud de la subsecuencia bitónica más larga en una matriz

Para imprimir el número máximo de Como usando cuatro claves dadas.

Problema de la mina de oro

Encuentra la distancia de edición mínima entre dos cadenas dadas

0-1 Problema de mochila

Distintas cadenas binarias de longitud n sin 1s consecutivos

Contar todas las decodificaciones posibles de una secuencia de dígitos dada

Encuentra el número total de formas de hacer cambios usando un conjunto de monedas dado

Establecer problema de partición | Programación dinámica

Una vez que tenga una buena práctica en las preguntas, puede intentar resolver tantos problemas como pueda en:

Problemas | LeetCode OJ

Juez de Esfera Online (SPOJ)

Dése desafíos diarios a partir de objetivos fáciles.

Por ejemplo:

Semana 1: objetivo fácil – 1 pregunta por día

Semana 2-3: 2 preguntas por día.

Al final de las 3 semanas, habrías completado 35 preguntas y cultivado el hábito de codificar todos los días.

Sigue practicando .. Todo lo mejor!

Espero que esto ayude.

Recomendaría encarecidamente al juez de Pekín en línea ( http://poj.org/ )

Hay miles de problemas algorítmicos, y puede enviar su código. Puede comprobar inmediatamente si su solución está bien o no. Su código debería 1) producir la salida correcta Y 2) lo suficientemente rápido.

Este recurso se usó realmente en una de las clases de Stanford (CS 97SI) para enseñar habilidades de codificación algorítmica. Aprendí mucho de ello.

Puede utilizar el idioma de su elección, incluido C ++.

Además, puede medir la dificultad de cada problema leyendo las estadísticas: qué porcentaje de envíos fueron correctos, cuántos resolvieron el problema, etc.

Espero que haya ayudado!

Práctica. Comience desde la parte superior y trabaje hacia abajo:
http://acm.timus.ru/problemset.a…