452. Usa la menor cantidad de flechas para detonar el globo (codicioso)

Hay muchos globos esféricos en un espacio bidimensional. Para cada globo, la entrada proporcionada son las coordenadas de inicio y finalización del diámetro del globo en la dirección horizontal. Dado que es horizontal, la ordenada no es importante, por lo que basta con conocer la abscisa del principio y el final. La coordenada inicial es siempre menor que la coordenada final.

Se puede disparar un arco y una flecha de forma completamente vertical desde diferentes puntos a lo largo del eje x. Dispara una flecha en la coordenada x. Si las coordenadas inicial y final del diámetro de un globo son xstart, xend y satisfacen xstart ≤ x ≤ xend, el globo se detonará. No hay límite para la cantidad de arcos y flechas que se pueden disparar. Una vez que se disparan el arco y la flecha, pueden avanzar indefinidamente. Queremos encontrar el número mínimo de arcos y flechas necesarios para detonar todos los globos.

Te da una matriz de puntos, donde puntos [i] = [xstart, xend] devuelve el número mínimo de arcos y flechas que deben dispararse para detonar todos los globos.

 
Ejemplo 1:

Entrada: puntos = [[10,16], [2,8], [1,6], [7,12]]
Salida: 2
Explicación: Para este ejemplo, x = 6 puede disparar [2,8], [ 1,6] Dos globos yx = 11 reventan los otros dos globos
Ejemplo 2:

Entrada: puntos = [[1,2], [3,4], [5,6], [7,8]]
Salida: 4

análisis:

Para el problema de dos dimensiones, considere usar una de las dimensiones para clasificar. La primera dimensión de puntos es el punto de partida de la coordenada x. Esta clasificación no puede distinguir las posiciones delantera y trasera de cada globo (el pequeño punto de partida no necesariamente ser el punto final). Pequeño, puede ser un globo grande). Si ordena por el punto final de la coordenada x, puede saber qué globo está en el frente. Con esta idea, puede ver qué globos tienen partes que se cruzan que puede compartir una flecha, es decir, si el globo en el frente Si el punto final es mayor o igual que el punto de inicio del siguiente globo, puede compartir una flecha, atravesar el primer elemento de puntos y actualizar el final punto del globo actual una vez que se necesita una nueva flecha.

ps: cuando se encuentre con una matriz multidimensional, primero considere buscar dimensiones importantes para ordenar

class Solution {
public:
    static bool compare(vector<int>& m, vector<int>& n){
        if(m[1] == n[1]) return m[0] < n[0];
        return m[1] < n[1];
    }
    int findMinArrowShots(vector<vector<int>>& points) {
        if(points.size() < 1) return 0;
        sort(points.begin(), points.end(), compare);
        // for(int i = 0; i < points.size(); i++) cout << points[i][1] << endl;
        int arrowNums = 1;
        int maxArrowLocation = points[0][1];
        for(int i = 1; i < points.size(); i++){
            if(maxArrowLocation >= points[i][0]){
                continue;
            }else{
                maxArrowLocation = points[i][1];
                arrowNums++;
            }
        }
        return arrowNums;
    }
};

Supongo que te gusta

Origin blog.csdn.net/qq_34612223/article/details/113860727
Recomendado
Clasificación