fusionar-fusionar dos matrices ordenadas

Título

Dados dos arreglos de enteros ordenados nums1 y nums2, por favor combine nums2 en nums1 para hacer nums1 un arreglo ordenado.

Inicialice el número de elementos de nums1 y nums2 am y n respectivamente. Puede suponer que el tamaño del espacio de nums1 es igual am + n, por lo que tiene suficiente espacio para almacenar
los elementos de nu ms2.

Ejemplo 1:

Entrada: nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
Salida: [1,2,2,3,5,6]

Ejemplo 2:

Entrada: nums1 = [1], m = 1, nums2 = [], n = 0
Salida: [1]

inmediato:

nums1.length == m + n
nums2.length == n
0 <= m, n <= 200
1 <= m + n
<= 200-109 <= nums1 [i], nums2 [i] <= 109

Ideas para resolver problemas

Método 1:
Almacene el número en nums2 en la posición restante en nums1, y luego llame al método arrays.sort.
Método 2:
1. Cree un puntero doble para apuntar al final de nums1 y nums2 respectivamente, y compare los punteros con el tamaño de los dos valores.
2. Desde Iniciar recorrido al final de nums1, y crear un puntero al final de num1, y atravesar el encabezado de nums1. El paso 1 coloca el valor mayor en la posición señalada por el puntero del paso 2.
3. Recorra los pasos 1, 2
4 (procesamiento detallado). Si no, todos los valores de nums2 se almacenan y se procesarán por separado

Demostración de código

método uno:

class Solution {
    
    
    public void merge(int[] nums1, int m, int[] nums2, int n) {
    
    
           for(int i=m;i<m+n;i++)
           {
    
    
               nums1[i]=nums2[i-m];
           }
        Arrays.sort(nums1);
        }
        }

resultado de ejecución:

La
respuesta de información fue exitosa:
tiempo de ejecución: 1 ms, derrotando al 24.48% de los usuarios de Java
Consumo de memoria: 38.7 MB, derrotando al 15.86% de los usuarios de Java

Método dos

class Solution {
    
    
    public void merge(int[] nums1, int m, int[] nums2, int n) {
    
    
        
        int flag=m+n-1;

        while (flag>=0&&m>=1&&n>=1)
        nums1[flag--] = nums1[m-1] > nums2[n-1] ? nums1[m-- -1] :nums2[n-- -1];
        
        while (n>=1)
        {
    
    
            nums1[flag--]=nums2[--n];
        }

    }
}

resultado de ejecución

La
respuesta de información fue exitosa:
tiempo de ejecución: 0 ms, derrotando al 100,00% de los usuarios de Java
Consumo de memoria: 38,4 MB, derrotando al 80,24% de los usuarios de Java

Supongo que te gusta

Origin blog.csdn.net/tangshuai96/article/details/113505399
Recomendado
Clasificación