Leetcode56-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 y los fusionan en [1,6].

Ejemplo 2

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

 

Ideas para resolver problemas: esta pregunta primero considera las situaciones de fusión, como {1,3} y {2,4} o {1,6} y {3,4}, o {1,3} {2, 7} {3,9} Esta área de superposición continua originalmente quería comparar los números adyacentes de cabeza y cola, pero puede haber múltiples intervalos de superposición consecutivos, por lo tanto, utilice el método de doble puntero para guardar la cabeza y la cola de cada intervalo, de modo que en el proceso de comparación Solo necesita comparar el puntero con cada matriz.

Primero debe ordenar la matriz para asegurarse de que el comienzo esté organizado de pequeño a grande.

 

class Solution {
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        if(intervals.size()<2) return intervals;
        sort(intervals.begin(),intervals.end());//排序
        vector<vector<int>> out;//存储结果
        int first=intervals[0][0];
        int last=intervals[0][1];
        for(int i=1;i<intervals.size();i++){
            if(last>=intervals[i][0]){
                last=intervals[i][1]>last?intervals[i][1]:last;//末尾指针取较大的那个数
            }
            else{
                out.push_back({first,last});
                first=intervals[i][0];
                last=intervals[i][1];
            }
        }
        out.push_back({first,last});
        return out;
    }
};

 

Publicado 17 artículos originales · me gustó 0 · vistas 3223

Supongo que te gusta

Origin blog.csdn.net/qq_31874075/article/details/105567473
Recomendado
Clasificación