2406. Dividir el intervalo en el número mínimo de grupos-grupos de diferencia.

2406. Dividir el intervalo en el número mínimo de grupos-grupos de diferencia.

Le proporciona una matriz de enteros bidimensional de intervalos, donde intervalos [i] = [lefti, righti] representa el intervalo cerrado [lefti, righti].

Debe dividir los intervalos en uno o más grupos de intervalos. Cada intervalo solo pertenece a un grupo y dos intervalos cualesquiera del mismo grupo no se cruzan.

Por favor devuelva el número mínimo de grupos que deben dividirse.

Se dice que dos intervalos se cruzan si cubren rangos superpuestos (es decir, tienen al menos un número en común). Digamos que los intervalos [1, 5] y [5, 8] se cruzan.

Ejemplo 1:

Entrada: intervalos = [[5,10],[6,8],[1,5],[2,3],[1,10]] Salida
: 3
Explicación: Podemos dividir el intervalo en los siguientes grupos de intervalos :

  • Grupo 1: [1, 5], [6, 8].
  • Grupo 2: [2, 3], [5, 10].
  • Grupo 3: [1, 10].
    Se puede demostrar que el intervalo no se puede dividir en menos de 3 grupos.

Ejemplo 2:

Entrada: intervalos = [[1,3],[5,6],[8,10],[11,13]]
Salida: 1
Explicación: Todos los intervalos son separados, por lo que podemos ponerlos todos en un grupo Dentro.

Este problema se resuelve utilizando matrices de diferencias.
El código de solución es el siguiente:


#define size 1000005




int minGroups(int** intervals, int intervalsSize, int* intervalsColSize){
    
    

int a[size];
for(int i=0;i<size;i++){
    
    
    a[i]=0;
}
for(int i=0;i<intervalsSize;i++){
    
    
    a[intervals[i][0]]=a[intervals[i][0]]+1;
    a[intervals[i][1]+1]=a[intervals[i][1]+1]-1;


}
int re=0;
int m=a[0];
for(int i=1;i<size;i++){
    
    
    m=m+a[i];
    re=fmax(re,m);



}
return re;
  

}

Supongo que te gusta

Origin blog.csdn.net/weixin_43327597/article/details/133269577
Recomendado
Clasificación