Colas de Prioridad: Ejercicios Prácticos y Soluciones
Clase 39 de 41 • Curso de Algoritmos Avanzados: Estructuras de Datos Lineales
Contenido del curso
Lista Enlazada
- 2

Estructura de datos: Lista Enlazada
05:27 min - 3

Programando listas enlazadas con Java
23:49 min - 4

Cómo Invertir una Lista Enlazada
06:37 min - 5

Odd Even Linked List: análisis del problema
01:59 min - 6

Solución de Odd Even Linked List
08:19 min - 7

Playground: Odd Even Liked List
- 8

Programando Odd Even Linked List con C++
10:38 min - 9

Linked List Cycle: análisis del problema
01:13 min - 10

Solución de Linked List Cycle
07:17 min - 11

Playground: Linked List Cycle
- 12

Programando Linked List Cycle con Python
10:28 min - 13

Palindrome Linked List: análisis del problema
02:18 min - 14

Solución de Palindrome Linked List
12:08 min - 15

Playground: Palindrome Linked List
- 16

Programando Palindrome Linked List con Java
16:56 min - 17

Reorder List: análisis del problema
02:04 min - 18

Solución de Reorder List
06:20 min - 19

Programando Reorder List con JavaScript
16:45 min - 20

Playground: Reorder List Without Repeated Values
- 21

Reto: LRU Caché
03:14 min - 22

Ejercicios Prácticos con Listas Enlazadas y Historial de Navegador
01:42 min - 23

Operaciones con Listas Enlazadas: Suma, Intercambio y Navegador
04:56 min
Pilas y colas
Colas de prioridad
- 30

Estructura de datos: Colas de Prioridad
04:02 min - 31

K Closest Points to Origin: análisis del problema
03:12 min - 32

Solución de K Closest Points to Origin
03:31 min - 33

Playground: K Closest Points to Origin
- 34

Programando K Closest Points to Origin con Python
10:45 min - 35

Reorganize String: análisis del problema
01:57 min - 36

Solución de Reorganize String
14:09 min - 37

Playground: Reorganize String
- 38

Programando Reorganize String con Python
16:04 min - 39

Colas de Prioridad: Ejercicios Prácticos y Soluciones
Viendo ahora - 40

Colas de Prioridad y Gestión de Eventos
05:33 min
Próximos pasos
Ejercicios recomendados de Colas de Prioridad
Organizador de Tareas
Tienes un arreglo de caracteres tasks que representa las tareas que debe realizar una CPU, donde cada letra representa una tarea diferente. Las tareas pueden realizarse en cualquier orden. Cada tarea se realiza en una unidad de tiempo. Por cada unidad de tiempo la CPU puede completar una tarea o simplemente estar inactiva.
Sin embargo, existe un período de enfriamiento entre dos tareas iguales (la misma letra en la matriz) representado por la variable n, es decir que debe haber al menos n unidades de tiempo entre dos tareas iguales.
Devuelve el menor número de unidades de tiempo que la CPU tardará en terminar todas las tareas dadas.
Ejemplo 1: Entrada: tareas = ["A", "A", "A", "B", "B", "B"], n = 2 Salida: 8 Explicación: A -> B -> inactivo -> A -> B -> inactivo -> A -> B Hay al menos 2 unidades de tiempo entre dos tareas iguales. Ejemplo 2: Entrada: tareas = ["A", "A", "A", "B", "B", "B"], n = 0 Salida: 6 Explicación: En este caso cualquier permutación de tamaño 6 funcionaría ya que n = 0. ["A","A","A","B","B","B"] ["A","B","A","B","A","B"] ["B","B","B","A","A","A"] ... Y así sucesivamente.
Fluctuación del Precio de Acciones
Se le da un flujo de registros sobre una acción concreta. Cada registro contiene el tiempo y el precio correspondiente de la acción en esa marca. Por desgracia, debido a la naturaleza volátil del mercado de valores, los registros no vienen en orden y algunos registros pueden ser incorrectos. Otro registro con el mismo registro de tiempo puede aparecer más tarde en el flujo corrigiendo el precio del anterior registro erróneo.
Diseñe un algoritmo que: Actualice el precio de la acción en un momento en el tiempo determinado, corrigiendo el precio de cualquier registro anterior en ese instante. Encuentre el último precio de la acción basado en los registros actuales. El último precio es el precio de la última marca de tiempo registrada. Busque el precio máximo de la acción basado en los registros actuales. Encuentre el precio mínimo de la acción basado en los registros actuales.
Implementa la clase StockPrice: StockPrice(): inicializa el objeto sin registros de precios. void update(int timestamp, int price): actualiza el precio de la acción en el timestamp dado. int current(): devuelve el último precio de la acción. int maximum(): devuelve el precio máximo de la acción. int minimum(): devuelve el precio mínimo de la acción.
Ejemplo: Entrada. ["StockPrice", "update", "update", "current", "maximum", "update", "maximum", "update", "minimum"] [[], [1, 10], [2, 5], [], [], [1, 3], [], [4, 2], []] Salida: [null, null, null, 5, 10, null, 5, null, 2]
Explicación: StockPrice stockPrice = new StockPrice(); stockPrice.update(1, 10); // Las marcas de tiempo son [1] con los precios correspondientes [10]. stockPrice.update(2, 5); // Las marcas de tiempo son [1,2] con los precios correspondientes [10,5]. stockPrice.current(); // devuelve 5, la última marca de tiempo es 2 con el precio siendo 5. stockPrice.maximum(); // devuelve 10, el precio máximo es 10 en el timestamp 1. stockPrice.update(1, 3); // El timestamp 1 anterior tenía el precio incorrecto, por lo que se actualiza a 3. // Las marcas de tiempo son [1,2] con los precios correspondientes [3,5]. stockPrice.maximum(); // devuelve 5, el precio máximo es 5 después de la corrección. stockPrice.update(4, 2); // Las marcas de tiempo son [1,2,4] con los precios correspondientes [3,5,2]. stockPrice.minimum(); // devuelve 2, el precio mínimo es 2 en el timestamp 4.
Número máximo de eventos a los que se puede asistir
Dado un array de eventos donde events[i] = [comienzoDiai, finalDiai]. Cada evento i comienza en comienzoDiai y termina en finalDiai. Puedes asistir a un evento i en cualquier día d donde startTimei <= d <= endTimei. Sólo se puede asistir a un evento en cualquier momento d. Devuelve el número máximo de eventos a los que puedes asistir.
Ejemplo 1: Entrada: eventos = [[1,2],[2,3],[3,4]] Salida: 3 Explicación: Puedes asistir a los tres eventos.
Una forma de asistir a todos ellos es la que se muestra. Asistir al primer evento en el día 1. Asistir al segundo evento el día 2. Asistir al tercer evento el día 3.
Ejemplo 2: Entrada: eventos= [[1,2],[2,3],[3,4],[1,2]] Salida: 4
Car pooling
Tienes un carro con algunos asientos vacíos. El vehículo sólo circula hacia el este (es decir, no puede dar la vuelta y conducir hacia el oeste).
Dada la capacidad del vehículo como un número entero y un arreglo con la lista de viajes donde viajes[i] = [numPasajerosi, inicioi, destinoi]. Las ubicaciones se indican como el número de kilómetros hacia el este desde la ubicación inicial del carro. Retorna true si es posible recoger y dejar a todos los pasajeros de todos los viajes dados, o false en caso contrario.
Ejemplo 1: Entrada: viajes = [[2,1,5],[3,3,7]], capacidad = 4 Salida: false Ejemplo 2: Entrada: viajes = [[2,1,5],[3,3,7]], capacidad = 5 Salida: verdadero