Contar sin hacer dos búsquedas hash por elemento, el tamaño exacto de entrada donde Array.Sort deja de preservar el orden, y el heap que C# solo tuvo en .NET 6 — el que la mayoría del código viejo de concursos en C# todavía evita a mano.
Una pila que se niega a guardar cualquier cosa inútil responde “cuál es el siguiente elemento más grande” para todo un arreglo en una sola pasada — y la misma estructura mide el rectángulo más grande de un histograma.
Encontrar un valor en un arreglo ordenado es lo menos útil que hace la búsqueda binaria. El patrón que importa busca en un espacio de respuestas que nadie construyó, y no necesita un arreglo ordenado en absoluto.
Precalcula una vez y responde cada pregunta sobre un rango en tiempo constante — y el truco inverso que casi nadie enseña, que aplica una actualización a todo un rango escribiendo dos celdas.
Los dos punteros se mueven en la misma dirección y la brecha entre ellos es la respuesta. Cuatro formas de ventana, más el truco de conteo que convierte «exactamente K» en una resta, porque «exactamente K» no se puede deslizar directamente.
Cinco patrones que no necesitan nada de memoria extra — dos enteros y el arreglo que te dieron. Dónde aplica cada uno, por qué es lineal, y la única línea del último que todo el mundo escribe al revés.
La mayoría de quienes programan en Python usa f-strings todos los días y conoce como una quinta parte de lo que hacen. Esta es la otra cuatro quintas partes.
Contar cosas, agruparlas y mantener una cola son tres bucles que casi todo el mundo escribe a mano. El módulo collections ya tiene los tres.
with existe para que la limpieza ocurra pase lo que pase en el cuerpo. Salgas antes, lances una excepción o termines normal, el código de salida corre igual.
Una dataclass escribe por ti los métodos aburridos. Declaras los campos con anotaciones de tipo y el decorador genera __init__, __repr__ y __eq__.