[Épée pointant vers l'offre | 3. Fusionner deux tableaux ordonnés]

0. Fusionner deux tableaux triés

image-20230408133816123

Question : Il y a deux tableaux A1 et A2 disposés par ordre croissant. Il y a suffisamment d'espace libre à la fin de A1 pour accueillir A2. Veuillez implémenter une fonction pour insérer tous les nombres de A2 dans A1, et tous les nombres sont triés.

  • nums1.length == m + n
  • nums2.length == n

Solution : Cette question est similaire à [Offre Sword Finger | 2. Remplacer les espaces]. Lors de la fusion de tableaux (chaînes), si vous déplacez chaque numéro d'avant en arrière, vous devez déplacer le numéro plusieurs fois, afin que nous puissions envisager de passer de l'arrière vers l'avant. Mobile, augmentant ainsi l'efficacité.

Version linguistique 1.C

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
    //目标就是把nums2中的元素挪完-->end2==>0
    //下面的deadLine,end1,end2都是对应的下标--双指针
    int deadLine=m+n-1;
    int end1=m-1;
    int end2=n-1;
    while(end1>=0&&end2>=0)
    {
        if(nums1[end1]>nums2[end2])
        {
            nums1[deadLine--]=nums1[end1--];
        }
        else
        {
            nums1[deadLine--]=nums2[end2--];
        }
    }
    //到这里如果end2==0的话,就说明num2挪完了,任务完成了;如果是end1==0的话,直接把nums2中剩余元素挪动到num1中即可
    if(end1<0)
    {
        while(end2>=0)
        {
            nums1[deadLine--]=nums2[end2--];
        }
    }
}

Plaignons-nous : ce paramètre num1Size est un peu redondant !

2.Version C++

class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        int deadLine=nums1.size()-1;
        int end1=m-1;
        int end2=n-1;
        while(end1>=0&&end2>=0)
        {
            if(nums1[end1]>nums2[end2])
            {
                nums1[deadLine--]=nums1[end1--];
            }
            else
            {
                nums1[deadLine--]=nums2[end2--];
            }
        }
        if(end1<0)
        {
            while(end2>=0)
            {
                nums1[deadLine--]=nums2[end2--];
            }
        }
    }
};

Je suppose que tu aimes

Origine blog.csdn.net/qq_64428099/article/details/130029111
conseillé
Classement