vecteur leetcode + fusion d'intervalle 56. intervalle de fusion + 57. intervalle d'insertion

56. Intervalle de fusion

Étant donné un ensemble d'intervalles, veuillez fusionner tous les intervalles qui se chevauchent.

Exemple 1:

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

Explication: Les intervalles [1,3] et [2,6] se chevauchent et les fusionnent dans [1,6].
Exemple 2:

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

Explication: Les intervalles [1,4] et [4,5] peuvent être considérés comme des intervalles qui se chevauchent.

L'
algorithme gourmand de résolution de problèmes
trie le tableau donné en fonction du premier nombre, le
point clé est de
créer un nouveau tableau et de le comparer avec le tableau donné. Si l'extrémité gauche de l'intervalle se trouve dans l'intervalle, celle dont l'extrémité droite est la plus grande est sélectionnée.
Familier avec l'utilisation du vecteur! vector.size () peut déterminer si vector est vide, vector.back () peut obtenir le dernier élément de 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. Intervalle d'insertion

Donnez une liste d'intervalles qui ne se chevauchent pas, triés par le début et la fin de l'intervalle.

Pour insérer un nouvel intervalle dans la liste, vous devez vous assurer que les intervalles de la liste sont toujours ordonnés et ne se chevauchent pas (si nécessaire, vous pouvez fusionner les intervalles).

Exemple 1:

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

Exemple 2:

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

Explication: cela est dû au fait que le nouvel intervalle [4,8] chevauche [3,5], [6,7], [8,10].

Résolution de problèmes: Complexity
NlogN place d'abord newinterval en intervalle, puis trie par le premier nombre; la
même chose peut être faite plus tard avec l'intervalle de fusion;

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

Problème 2: complexité N.
Étant donné que le tableau donné est trié, la valeur l est inférieure à newinterval et placée en premier dans le vecteur de résultat;
lorsque la valeur l n'est pas inférieure à newinterval, fusionnez newinterval dans le tableau de résultats;
puis fusionnez les intervalles suivants;

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

Lien de titre: 57. Intervalle d'insertion

Publié 105 articles originaux · a gagné les éloges 6 · vues 4944

Je suppose que tu aimes

Origine blog.csdn.net/BLUEsang/article/details/105557851
conseillé
Classement