LeetCode 732. My Schedule III (Pensamiento diferencial)

Directorio de artículos

1. Título

Implemente una clase MyCalendar para almacenar su horario, siempre puede agregar nuevos horarios.

MyCalendar tiene un book(int start, int end)método. Esto significa añadir una programación para comenzar en el final de los tiempos, la atención, el tiempo aquí es intervalo semiabierto, es decir [start, end), el rango de x es un número real, start <= x < end.

Cuando K horarios se superponen en algún momento (por ejemplo, K horarios están todos al mismo tiempo), se generarán K reservas.

Cada llamada MyCalendar.bookcuando el método devuelve un entero K, representa el libro más grande de K veces .

Siga los pasos a continuación para llamar a la clase MyCalendar: MyCalendar cal = new MyCalendar(); MyCalendar.book(start, end)

示例 1:
MyCalendarThree();
MyCalendarThree.book(10, 20); // returns 1
MyCalendarThree.book(50, 60); // returns 1
MyCalendarThree.book(10, 40); // returns 2
MyCalendarThree.book(5, 15); // returns 3
MyCalendarThree.book(5, 10); // returns 3
MyCalendarThree.book(25, 55); // returns 3
解释: 
前两个日程安排可以预订并且不相交,所以最大的K次预订是1。
第三个日程安排[10,40]与第一个日程安排相交,最高的K次预订为2。
其余的日程安排的最高K次预订仅为3。
请注意,最后一次日程安排可能会导致局部最高K次预订为2,但答案仍然是3,
原因是从开始到最后,时间[10,20][10,40][5,15]仍然会导致3次预订。

说明:
每个测试用例,调用 MyCalendar.book 函数最多不超过 400次。
调用函数 MyCalendar.book(start, end)时, 
start 和 end 的取值范围为 [0, 10^9]

Fuente: LeetCode (LeetCode) Enlace: https://leetcode-cn.com/problems/my-calendar-iii Los
derechos de autor son propiedad de LeetCode . Para reimpresiones comerciales, comuníquese con la autorización oficial. Para reimpresiones no comerciales, indique la fuente.

2. Resolución de problemas

Temas similares:
LeetCode 729. Mi horario I (establecer búsqueda binaria)
LeetCode 731. Mi horario II (establecer búsqueda binaria / pensar en diferencias)

  • Una mejor solución a este problema es el árbol de segmento de línea (no se puede escribir)
  • Hacer con el pensamiento diferente
class MyCalendarThree {
    
    
    map<int,int> m;
public:
    MyCalendarThree() {
    
    

    }
    
    int book(int start, int end) {
    
    
        m[start]++;//差分思想
        m[end]--;
        int count = 0, maxCount = 0;
        for(auto it = m.begin(); it != m.end(); ++it)
        {
    
    
            count += it->second;
            maxCount = max(maxCount, count);
        }
        return maxCount;
    }
};

364 ms 24,2 MB


Mi dirección de blog de CSDN https://michael.blog.csdn.net/

Mantenga presionado o escanee el código QR para seguir mi cuenta oficial (Michael Amin), ¡vengan juntos, aprendan y progresen juntos!
Michael Amin

Supongo que te gusta

Origin blog.csdn.net/qq_21201267/article/details/108889442
Recomendado
Clasificación