Fusionar dos matrices ordenadas [leetcode]

1 pregunta:

Se le proporcionan dos matrices de números enteros nums1 y nums2 dispuestas en orden no decreciente, y dos números enteros myn, que representan el número de elementos en nums1 y nums2 respectivamente.

Fusione nums2 en nums1 para que la matriz fusionada también esté organizada en orden no decreciente.

Nota: En última instancia, la función no debe devolver la matriz fusionada, sino almacenarla en la matriz nums1. Para hacer frente a esta situación, la longitud inicial de nums1 es m + n, donde los primeros m elementos representan elementos que deben fusionarse y los últimos n elementos son 0 y deben ignorarse. La longitud de nums2 es n.

2.Ideas:

Simplemente compare los elementos más grandes de las dos matrices cada vez.

① Primero, tome los elementos más grandes en las dos matrices para comparar. El elemento más grande se coloca en la posición m+n-1 de la matriz num1. Luego se resta el índice de posición original (m o n) del elemento actual y el propósito es hacia abajo. Un elemento a comparar, y nuestro índice de posición vacía num1 también debe restarse, con el propósito de apuntar a la siguiente posición vacía. Usamos m+n-1 para representar el índice de posición vacía aquí. Cuando Se resta m o n. El índice de posición vacía también se reducirá en consecuencia;

② Es necesario repetir este proceso de comparación, ¿cuándo finalizará? Cuando la posición de comparación ha llegado al extremo izquierdo, es decir, cuando el índice es 0, ya no podemos comparar, porque m-1 y n-1 aquí son los índices respectivos de las dos matrices, y la condición del bucle es m > 0 && n > 0, siempre que se recorra una matriz hasta el final, salga del ciclo;

③ Después de que sale el ciclo, si no se cumplen las condiciones, si n <0, pero m>0 o tanto n como m son menores que 0, significa que todos los elementos en num2 se han insertado en num1 y la fusión se completa en este momento;

④ Si m<0, pero n>0, esta situación significa que todos los elementos en num1 han sido comparados y solo los elementos en num2 quedan esperando ser insertados, por lo que en este momento también necesitamos un bucle while para comparar los elementos en num2 Insertar en num1 a su vez. El índice de posición vacía sigue siendo m + n-1. Cada vez que n se resta hasta que n sea igual a 0.

3. Implementación del código:

class Solution {
    
    
    public void merge(int[] nums1, int m, int[] nums2, int n) {
    
    
        while (m > 0 && n > 0) {
    
    
            if(nums1[m - 1] > nums2[n - 1]) {
    
    
                nums1[m + n - 1] = nums1[m - 1];
                m--;
            } else {
    
    
                nums1[m + n - 1] = nums2[n - 1];
                n--;
            }
        }

        while (n > 0) {
    
    
            nums1[m + n - 1] = nums2[n - 1];
            n--;
        }
    }
}

Supongo que te gusta

Origin blog.csdn.net/m0_52861684/article/details/132384708
Recomendado
Clasificación