vector de código leet + combinación de intervalos 56. intervalo de combinación + 57. intervalo de inserción

56. Intervalo de fusión

Dado un conjunto de intervalos, combine todos los intervalos superpuestos.

Ejemplo 1:

输入: [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]

Explicación: Los intervalos [1,3] y [2,6] se superponen y los fusionan en [1,6].
Ejemplo 2:

输入: [[1,4],[4,5]]
输出: [[1,5]]

Explicación: Los intervalos [1,4] y [4,5] pueden considerarse intervalos superpuestos.

El
algoritmo de resolución de problemas de Greedy
ordena la matriz dada por el primer número, el
punto clave es
crear una nueva matriz y compararla con la matriz dada.Si el extremo izquierdo del intervalo está dentro del intervalo, se selecciona el que tiene el extremo derecho más grande.
Familiarizado con el uso del vector! vector.size () puede determinar si el vector está vacío; vector.back () puede obtener el último elemento del vector;

class Solution {
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        if (intervals.size()==0){
            return {};
        }

        sort(intervals.begin(), intervals.end());
        //按first排序

        //新建一个二维数组,保存结果
        vector<vector<int>> result;

        for(int i=0;i<intervals.size();i++)
        {
            int L=intervals[i][0], R = intervals[i][1];
            if(!result.size()||result.back()[1]<intervals[i][0])
                result.push_back(intervals[i]);
            else result.back()[1]=max(intervals[i][1],result.back()[1]);
        }
        return result;
    }
};

57. Insertar intervalo

Proporcione una lista no superpuesta de intervalos ordenados por el principio y el final del intervalo.

Para insertar un nuevo intervalo en la lista, debe asegurarse de que los intervalos en la lista todavía estén ordenados y no se superpongan (si es necesario, puede fusionar los intervalos).

Ejemplo 1:

输入: intervals = [[1,3],[6,9]], newInterval = [2,5]
输出: [[1,5],[6,9]]

Ejemplo 2

输入: intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]
输出: [[1,2],[3,10],[12,16]]

Explicación: Esto se debe a que el nuevo intervalo [4,8] se superpone con [3,5], [6,7], [8,10].


Resolución de problemas: Complejidad NlogN pone primero el nuevo intervalo en intervalo, y luego lo ordena por el primer número; lo
mismo puede hacerse más tarde con el intervalo de fusión;

class Solution {
public:
    vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {
        vector<vector<int>> result;

        intervals.push_back(newInterval);
        sort(intervals.begin(),intervals.end());

        for(int i=0;i<intervals.size();i++)
        {
            if(!result.size()||intervals[i][0]>result.back()[1])
                result.push_back(intervals[i]);
            else result.back()[1]=max(result.back()[1],intervals[i][1]);

        }
        return result;
    }
};

Problema 2: Complejidad N.
Debido a que la matriz dada está ordenada, el valor l es menor que el nuevo intervalo y se coloca primero en el vector de resultados;
cuando el valor l no es menor que el nuevo intervalo, combine el nuevo intervalo en la matriz de resultados;
luego combine los intervalos subsiguientes;

class Solution {
public:
    vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {
        vector<vector<int>> result;        

        int i;
        for(i=0;i<intervals.size();i++)
        {
            if(intervals[i][0]<newInterval[0])
                result.push_back(intervals[i]);
            else break;
        }    
            
        if(!result.size()||newInterval[0]>result.back()[1])
            result.push_back(newInterval);
        else result.back()[1]=max(result.back()[1],newInterval[1]);

        for(;i<intervals.size();i++)
        {
            if(!result.size()||intervals[i][0]>result.back()[1])
            result.push_back(intervals[i]);
            else result.back()[1]=max(result.back()[1],intervals[i][1]);
        }
        return result;
    }
};

Enlace del título: 57. Intervalo de inserción

Publicados 105 artículos originales · ganado elogios 6 · vistas 4944

Supongo que te gusta

Origin blog.csdn.net/BLUEsang/article/details/105557851
Recomendado
Clasificación