[código de acceso] 1353. Número máximo de eventos a los que se puede asistir

Descripción

Dada una matriz de eventos donde events [i] = [startDayi, endDayi]. Cada evento i comienza en startDayi y termina en endDayi.

Puede asistir a un evento i en cualquier día d donde startTimei <= d <= endTimei. Tenga en cuenta que solo puede asistir a un evento a la vez d.

Devuelve el número máximo de eventos a los que puedes asistir.

Ejemplo 1:
Inserte la descripción de la imagen aquí

Input: events = [[1,2],[2,3],[3,4]]
Output: 3
Explanation: You can attend all the three events.
One way to attend them all is as shown.
Attend the first event on day 1.
Attend the second event on day 2.
Attend the third event on day 3.

Ejemplo 2:

Input: events= [[1,2],[2,3],[3,4],[1,2]]
Output: 4

Ejemplo 3:

Input: events = [[1,4],[4,4],[2,2],[3,4],[1,1]]
Output: 4

Ejemplo 4:

Input: events = [[1,100000]]
Output: 1

Ejemplo 5:

Input: events = [[1,1],[1,2],[1,3],[1,4],[1,5],[1,6],[1,7]]
Output: 7

Restricciones:

  • 1 <= eventos.longitud <= 10 ^ 5
  • eventos [i] .length == 2
  • 1 <= startDayi <= endDayi <= 10 ^ 5

análisis

El significado de la pregunta es: para un número de intervalos [si, ei], cada unidad de tiempo puedo y solo puedo completar una tarea, el requisito para completar la tarea es si <= i <= ei, pregunte cuántas tareas se puede completar como máximo.
Me refiero a la implementación de otras personas que usan el montón, primero clasifique los eventos, encuentre el valor máximo n de eventos y luego recorra de 1 a n + 1. Para la i atravesada, encuentre los eventos que comienzan con i, y luego agregue endDayi En el montón, luego elimine el número menor que i al final, y el final del número restante es mayor o igual que i. Si no está vacío, significa que se ha encontrado un evento que cumple con los requisitos, y res se actualiza.

Código

class Solution:
    def maxEvents(self, events: List[List[int]]) -> int:
        events.sort()
        res=0
        n=0
        for i,j in events:
            n=max(n,i,j)
        end=[]
        for i in range(1,n+1):
            while(events and events[0][0]==i):
                heapq.heappush(end,events.pop(0)[1])
            while(end and end[0]<i):
                heapq.heappop(end)
            if(end):
                heapq.heappop(end)
                res+=1
                
        return res

referencias

Tiempo de espera codicioso, consulte el montón oficial usado

Supongo que te gusta

Origin blog.csdn.net/w5688414/article/details/115269298
Recomendado
Clasificación