An open API service indexing awesome lists of open source software.

https://github.com/valentinocarmonas/rutinadelprogramador

En este repositorio guardo todos los ejercicios personales que hago.
https://github.com/valentinocarmonas/rutinadelprogramador

ci java junit leetcode-java leetcode-solutions practice practice-programming

Last synced: about 2 months ago
JSON representation

En este repositorio guardo todos los ejercicios personales que hago.

Awesome Lists containing this project

README

          

![Tests](https://github.com/ValentinoCarmonaS/RutinaDelProgramador/actions/workflows/tests.yml/badge.svg)
![Tests](https://img.shields.io/badge/Total_Problems_Solved-+44-blue)

# Rutina del Programador

**Frecuencia**: 5 días a la semana (Lunes a Viernes), con fines de semana para repasar o descansar.
**Duración por sesión**: 1.5 - 2.5 horas (adaptable a tu tiempo).

### Warm-up (Calentamiento - 10-15 minutos diarios)

- **1 problema fácil de Arrays o Strings**: Para activar la mente y refrescar los conceptos básicos. Cada sesión comenzará con esto.

---

### **Día 1: Arrays y Tablas Hash (Fundamentos Sólidos)**

- **Bloque 1: Arrays (2-3 ejercicios)**
- **Ejercicios**: Problemas de búsqueda (¿existe un elemento?), manipulación básica (invertir un sub-array), o encontrar duplicados.
- **"Sets & Reps"**: Intentare una solución, luego se optimízara. Si no sale, se revisa el porque o la solución y se vuelve a intentar.
- **Bloque 2: Hash Tables (1-2 ejercicios)**
- **Ejercicios**: Problemas como "Two Sum" (si no lo has hecho), conteo de frecuencias de caracteres/números, o encontrar elementos únicos.
- **"Sets & Reps"**: en la eficiencia de la tabla hash para reducir la complejidad de tiempo.

### **Día 2: Cadenas y Punteros (Manipulación Eficiente)**

- **Bloque 1: Strings (2-3 ejercicios)**
- **Ejercicios**: Palíndromos, inversión de palabras en una cadena, validación de formatos (ej. paréntesis).
- **"Sets & Reps"**: Presta atención a la inmutabilidad de las cadenas en Java y cómo manipularlas eficientemente.
- **Bloque 2: Two Pointers (1-2 ejercicios)**
- **Ejercicios**: Problemas en arrays ordenados (encontrar pares con una suma, eliminar duplicados).
- **"Sets & Reps"**: El objetivo es dominar esta técnica para resolver problemas en O(n) tiempo.

### **Día 3: Ordenamiento y Búsqueda Binaria (Optimización)**

- **Bloque 1: Sorting (1-2 ejercicios)**
- **Ejercicios**: No necesitas implementar algoritmos de ordenamiento complejos, sino usarlos. Por ejemplo, problemas que requieren ordenar un array o una lista de objetos para luego procesarlos.
- **"Sets & Reps"**: Entiende cuándo usar `Arrays.sort()` o `Collections.sort()` y sus complejidades.
- **Bloque 2: Binary Search (2-3 ejercicios)**
- **Ejercicios**: Búsqueda en arrays ordenados (el elemento exacto, el primer/último elemento de un valor, un elemento en un array rotado).
- **"Sets & Reps"**: La precisión en los límites (`low`, `high`, `mid`) es clave. ¡Practica el шаблон!

### **Día 4: Listas Enlazadas y Pilas/Colas (Estructuras Dinámicas)**

- **Bloque 1: Linked List (1-2 ejercicios)**
- **Ejercicios**: Invertir una lista enlazada, detectar ciclos, eliminar un nodo.
- **"Sets & Reps"**: Enfócate en la manipulación de punteros (`next`). Dibujar la lista es muy útil.
- **Bloque 2: Stack & Queue (2-3 ejercicios)**
- **Ejercicios**: Validar paréntesis (usando Stack), implementar una cola con dos pilas, o problemas de "primer entrado, primer salido" con colas.
- **"Sets & Reps"**: Piensa en los escenarios donde LIFO o FIFO son apropiados.

### **Día 5: Introducción a Árboles (Jerarquías)**

- **Bloque 1: Binary Tree (2-3 ejercicios)**
- **Ejercicios**: Recorridos (Inorder, Preorder, Postorder - implementa uno o dos), encontrar la altura de un árbol, contar nodos.
- **"Sets & Reps"**: Recursión es tu mejor amigo aquí. Entender cómo funciona la llamada de pila para cada recorrido.
- **Bloque 2: Binary Search Tree (1 ejercicio)**
- **Ejercicios**: Buscar un valor, insertar un nodo, validar si un árbol es un BST.
- **"Sets & Reps"**: Aprovecha la propiedad de los BST para hacer búsquedas eficientes.

---

### **Fin de Semana: Descanso Activo / Repaso / Desafío**

- **Día de Repaso**: Vuelve a intentar ejercicios que te costaron durante la semana sin mirar la solución. Consolida conceptos.
- **Día de Desafío**: Intenta un problema de dificultad media-difícil de alguna de las categorías que ya manejas, o uno de los algoritmos de búsqueda como DFS/BFS para grafos.
- **Descanso**: ¡Tan importante como el ejercicio! Desconecta para recargar energías.

---

### Progresión Semanal (Después de 2-3 semanas con esta rutina)

Una vez que te sientas cómodo con las secciones anteriores, puedes empezar a integrar gradualmente más ejercicios de:

- **DFS (Depth-First Search)** y **BFS (Breadth-First Search)**: Empieza con ejercicios en árboles, luego en grafos simples.
- **Graphs**: Problemas básicos de conectividad o encontrar caminos.
- **Heap (Priority Queue)**: Problemas donde necesites gestionar elementos con prioridades.
- **Dynamic Programming**: Empieza con los problemas "introductorios" de DP, que a menudo son los más desafiantes al principio pero muy gratificantes.