Intervalo de fusión de Leetcode c ++

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;
    }
};

Supongo que te gusta

Origin blog.csdn.net/weixin_39139505/article/details/90215731
Recomendado
Clasificación