2022-4-12 Leetcode 452. Detona el globo con el mínimo número de flechas

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
Encuentre el intervalo superpuesto más largo

// class Solution {
    
    
// public:
//     int findMinArrowShots(vector<vector<int>>& points) {
    
    
//         if(points.empty())
//         return 0;
//         sort(points.begin(),points.end(),[&](const vector<int>& a,const vector<int>& b)
//         {return a[0] <= b[0];});
//         int pre = points[0][1];
//         int ballooms = 0;
//         for(int i = 1;i < points.size();i++){
    
    
//             if(pre >= points[i][0]){
    
    
//                 pre = max(points[i][1],pre);
//             }else {
    
    
//                 ballooms++;
//                 pre = points[i][1];
//             }
//         }
//         return ballooms;
        
//     }
// };
//我错了,爆掉的气球并不能引爆另外的气球。
//这道题本质上是寻找有几个并区间

class Solution {
    
    
public:
    static bool cmp(const vector<int>& a,const vector<int>& b){
    
    
        if(a[0] < b[0]) 
        return true;
        else if(a[0] == b[0]) 
        return a[1] < b[1];
        else return true;
    }
    int findMinArrowShots(vector<vector<int>>& points) {
    
    

        if(points.empty())
        return 0;
        sort(points.begin(),points.end(),cmp);
        int pre = points[0][1];
        int ballooms = 0;
        for(int i = 1;i < points.size();i++){
    
    
            if(pre >= points[i][0] && pre <= points[i][1]){
    
    

            }else {
    
    
                ballooms++;
                pre = points[i][1];
            }
        }
        return ballooms;
    }
};

inserte la descripción de la imagen aquí
En la segunda edición, trata de elegir entre áreas pequeñas. El más pequeño es más probable que se superponga con otras personas.

class Solution {
    
    
public:
    // static bool cmp(const vector<int>& a,const vector<int>& b){
    
    
    //     if(a[0] < b[0]) 
    //     return true;
    //     else if(a[0] == b[0]) 
    //     return a[1] < b[1];
    //     else return true;
    // }
    int findMinArrowShots(vector<vector<int>>& points) {
    
    

        if(points.empty())
        return 0;
        sort(points.begin(),points.end(),[](const vector<int>& a,const vector<int>& b){
    
    
            return a[1] < b[1];
        });
        int pre = points[0][1];
        int ballooms = 1;
        for(int i = 1;i < points.size();i++){
    
    
            if(pre >= points[i][0] && pre <= points[i][1]){
    
    

            }else {
    
    
                ballooms++;
                pre = points[i][1];
            }
        }
        return ballooms;
    }
};

Supongo que te gusta

Origin blog.csdn.net/weixin_51187533/article/details/124119480
Recomendado
Clasificación