Intervalo de fusión
Dado un conjunto de intervalos, combine todos los intervalos superpuestos.
Ejemplo 1:
Entrada: [[1,3], [2,6], [8,10], [15,18]]
Salida: [[1,6], [8,10], [15,18]]
Explicación: El intervalo [1,3] y [2,6] se superponen, combínalos en [1,6].
Ejemplo 2:
Entrada: [[1,4], [4,5]]
Salida: [[1,5]]
Explicación: Los intervalos [1,4] y [4,5] pueden considerarse como intervalos superpuestos.
Solución 1:
- En primer lugar, el título no indica que la matriz esté ordenada, por lo que ordenamos en el primer paso, ordenando en orden ascendente según la primera posición de la matriz y ordenando en orden descendente según la segunda posición una vez que la primera posición es igual.
- En segundo lugar, dado que se necesita demasiado tiempo para eliminar y cambiar elementos en la matriz original, declaramos una matriz bidimensional para almacenar el resultado y una matriz unidimensional para almacenar temporalmente los datos que se insertarán.
- Dado que está ordenado, primero juzgamos si el límite inferior del intervalo es mayor o igual que el límite superior del siguiente intervalo al juzgar. Si es así, podemos juzgar que los dos intervalos se repiten en este momento; de lo contrario, los dos intervalos no se repiten; continúe juzgando el límite inferior del intervalo. Si el límite es más pequeño que el límite inferior del siguiente intervalo, si lo es, significa que los dos intervalos se cruzan; de lo contrario, significa que el intervalo contiene.
class Solution {
public:
static bool cmp(const vector<int>&a,const vector<int>&b )
{
if(a[0]==b[0])
return a[1]>b[1];
return a[0]<b[0];
}
vector<vector<int>> merge(vector<vector<int>>& intervals) {
if(intervals.empty()) return intervals;
vector<vector<int>> res;
int count=0;
sort(intervals.begin(),intervals.end(),cmp);
vector<int> temp;
temp.push_back(intervals[0][0]);
temp.push_back(intervals[0][1]);
res.push_back(temp);
for(int i=1;i<intervals.size();i++)
{
if(res[count][1]>=intervals[i][0])
{
if(res[count][1]<=intervals[i][1])
{
res[count][1]=intervals[i][1];
}
}
else
{
count++;
temp[0]=intervals[i][0];
temp[1]=intervals[i][1];
res.push_back(temp);
}
}
return res;
}
};