Verificación de Validez de Cadenas de Paréntesis con Carácter Comodín
El desafío consiste en determinar si una cadena, compuesta exclusivamente por tres tipos de caracteres: '(', ')', y '*', es válida. Las reglas que definen la validez de dicha cadena son las siguientes:
Cada paréntesis de apertura '(' debe tener un paréntesis de cierre ')' correspondiente.
Cada paréntesis de cierre ')' debe tener un paréntesis ...
Publicado el 7-2 18:36
Búsqueda Binaria para Detectar Picos en Arreglos
Problema 21: Índice del Pico en un Arreglo de Montaña
Enlace del problema: 852. Peak Index in a Mountain Array - LeetCode
Descripción: Se proporciona un arreglo de montaña donde existe un índice que satisface: arr[i] > arr[i-1] y arr[i] > arr[i+1]. Devuelve ese índice del pico.
Enfoque mediante búsqueda binaria
En lugar de un enfoque de f ...
Publicado el 6-27 20:30
LeetCode 3433: Conteo de Menciones de Usuarios con Ordenamiento y Simulación
Los eventos de entrada no están garantizados en orden cronológico, por lo que es necesario ordenarlos primero según la marca de tiempo.
Se ordenan los eventos de menor a mayor marca de tiempo. Para marcas iguales, los eventos de desconexión se procesan antes que los mensajes, ya que los cambios de estado deben ocurrir antes de los eventos de me ...
Publicado el 6-22 19:28
Agrupación de Anagramas usando Tablas Hash y Ordenamiento en C++
Definición del Problema
Dado un arreglo de cadenas de texto, el objetivo es agrupar los anagramas. Un anagrama se define como una palabra o frase formada al reordenar las letras de una palabra o frase distinta, utilizando exactamente los mismos caracteres y la misma cantidad de veces.
Enfoque Inicial: Comparación de Frecuencias
Una aproximación ...
Publicado el 6-18 01:46
Solución al Problema de Naranjas Podridas en una Cuadrícula con BFS Multi-fuente
Descripción del Problema
Dada una cuadrícula de dimensiones m x n, donde cada celda puede contenre:
0 para una celda vacía.
1 para una naranja fresca.
2 para una naranja podrida.
Cada minuto, las naranjas podridas infectan a las naranjas frescas adyacentes en las cuatro direcciones cradinales (arriba, abajo, izquierda, derecha). Se requiere d ...
Publicado el 6-15 21:24
Implementaciones en Java de algoritmos para desafíos de LeetCode
Este documento explora soluciones en Java para tres problemas comunes de LeetCode, destacando técnicas algorítmicas esenciales.
Para el problema de encontrar la subcadena palindrómica más larga, se emplea programación dinámica. Se construye una tabla booleana donde las celdas indican si un segmento es palíndromo, partiendo de casos base y aplia ...
Publicado el 6-14 23:58
Secuencia Count and Say: Generación e Implementaciones en C++
La secuencia count-and-say es una serie de números enteros que inicia así: 1, 11, 21, 1211, 111221, ...
Se interpreta como: 1 se lee como "un 1" → 11; 11 se lee como "dos 1s" → 21; 21 se lee como "un 2, luego un 1" → 1211.
Dado un entero n, el objetivo es generar la n-ésima secuencia, representada como una cadena d ...
Publicado el 6-11 03:12
Técnicas de Programación: Orden Topológico y Caché LRU en Soluciones de LeetCode
Casa Robada III (Programación Dinámica en Árbol)
En este problema, se utiliza programación dinámica en un árbol para calcular la máxima cantidad que se puede robar sin robar nodos adyacentes. La solución implica un recorrido DFS que devuelve dos valores: el máximo sin robar el nodo actual y el máximo robándolo.
class ArbolDP {
public int ...
Publicado el 6-10 20:31
Técnicas para resolver problemas de frecuencia de caracteres en cadenas de LeetCode
En este artículo, se exploran soluciones a varios problemas de LeetCode relacionados con la estadística de caracteres en cadenas, utilizando estructuras de datos como mapas hash, colas, ordenamiento y operaciones a nivel de bit.
387. Primer carácter único en una cadena
Solución mediante array de conteo: Se crea un array para registrar la frecue ...
Publicado el 6-10 05:58
Problemas de Listas Enlazadas en LeetCode
Este problema se puede resolver con dos enfoques distintos. El primero consiste en modificar la lista enlazada original. Utilizamos dos punteros: uno para recorrer la lista y otro para mantener el nodo anterior.
struct Nodo* eliminarElementos(struct Nodo* cabeza, int valor) {
struct Nodo* anterior = NULL;
struct Nodo* actual = cabeza;
...
Publicado el 6-9 03:26