[Espada apuntando a la oferta | 3. Fusionar dos matrices ordenadas]

0. Fusionar dos matrices ordenadas

imagen-20230408133816123

Pregunta: Hay dos matrices A1 y A2 dispuestas en orden ascendente. Hay suficiente espacio libre al final de A1 para acomodar A2. Implemente una función para insertar todos los números de A2 en A1 y todos los números estarán ordenados.

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

Solución: esta pregunta es similar a [Oferta de dedo de espada | 2. Reemplazar espacios]. Al fusionar matrices (cadenas), si mueve cada número de adelante hacia atrás, debe mover el número varias veces, por lo que podemos considerar pasar de De atrás hacia adelante Móvil, aumentando así la eficiencia.

Versión en idioma 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--];
        }
    }
}

Quejémonos: ¡este parámetro num1Size es un poco redundante!

2.Versión 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--];
            }
        }
    }
};

Supongo que te gusta

Origin blog.csdn.net/qq_64428099/article/details/130029111
Recomendado
Clasificación