Discusión sobre la inversión de matriz del algoritmo de javascript

Este artículo presenta principalmente la inversión de matriz del algoritmo de JavaScript. El artículo presenta el contenido en detalle sobre el tema, que tiene cierto valor de referencia. Los amigos que lo necesiten pueden consultarlo.

1. Inversión de matriz

1.1 tema de leecode - matriz giratoria

Dada una matriz, gire los elementos de la matriz k posiciones a la derecha, donde k es un número no negativo.

Ejemplo:

Entrada:  nums = [1,2,3,4,5,6,7], k = 3
Salida:  [5,6,7,1,2,3,4]
Explicación:
Gire a la derecha 1 paso:  [7 , 1,2,3,4,5,6]
Girar a la derecha 2 pasos:  [6,7,1,2,3,4,5]
Girar a la derecha 3 pasos:  [5,6,7,1,2 ,3, 4]

1.2 Tema de análisis

  • Los elementos del arreglo se rotan de manera ordenada, es decir, la posición de rotación k, lo que significa que cada elemento se mueve hacia atrás k bits, y el elemento con una longitud de nk~n-1 se moverá hacia adelante;
  • k es un número entero no negativo, por lo que no hay rotación a la izquierda;

1.3 Ideas para resolver problemas

Bajo la premisa de no usar matrices adicionales, podemos pensar de la siguiente manera, si la longitud de la matriz es longitud, entonces

  • Es necesario rotar K bits, es decir, los últimos k bits de la matriz se moverán al frente de la matriz, es decir, cuando invertimos la matriz, podemos conocer las dos matrices [0,k-1], [k,longitud-1], es la matriz correspondiente después de la rotación, pero se invierte el orden de los elementos en las dos matrices;
  • Luego, invierta [0, k-1], [k, lenth-1] a su vez, estas dos matrices, la matriz resultante es la respuesta

1.4 Código

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

dieciséis

17

const reverseArray = (nums, start, end) => {

  while (start < end) {

    const temp = nums[start];

    nums[start] = nums[end];

    nums[end] = temp;

    start += 1;

    end -= 1;

  }

  return nums;

};

var reverseFunction = function(nums, k) {

  let length  = nums.length;

  nums = reverseArray(nums, 0, length - 1);

  nums = reverseArray(nums, 0, k - 1);

  nums = reverseArray(nums, k, length - 1);

};

reverseFunction([1,2,3,4,5,6,7],3);

Salida: [5,6,7,1,2,3,4]

1.5 Análisis de complejidad

  • Complejidad de tiempo: Complejidad de tiempo: O(n), donde nn es la longitud de la matriz. Cada elemento se voltea dos veces, un total de n elementos, por lo que la complejidad temporal total es O(2n)=O(n).
  • Complejidad espacial: O(1). Solo se requiere espacio constante para almacenar varias variables.

1.6 Otras soluciones

Ideas:

  • Dado que se giran k bits, el elemento en la posición [longitud-1-k, longitud-1] se convierte en [0, k-1]
  • El elemento en la posición [0, longitud-1-k] se convierte en [longitud-1-k, longitud-1]
  • Entonces solo necesitamos dividir la matriz original en [0,k-1], [longitud-1-k,longitud-1], y luego dividirla según [longitud-1-k,longitud-1]+[0 ,k -1] Ensamblar en una matriz

código:

1

2

3

4

5

6

7

8

var reverseFunction2 = function(nums, k) {

  let length  = nums.length;

  let arrayLeft = nums.slice(0,length-k);

  let arrayRight = nums.slice(length-k);

  // return [...new Set([...arrayRight,...arrayLeft])];

  return arrayRight.concat(arrayLeft);

};

reverseFunction2([1,2,3,4,5,6,7],3);

Encontrará que en el código anterior, comenté una línea, porque es absolutamente tentador usar el nuevo método Set para fusionar dos matrices, luego, tenga en cuenta que no debe usarse, porque el nuevo método Set hablará de dos matrices Después de la fusión y la deduplicación, si el mismo elemento aparece en la matriz original, ¡el nuevo conjunto le enseñará una lección al usuario!

Resumir

Diferentes personas tienen diferentes ideas sobre la lógica del algoritmo, pero todas conducen al mismo objetivo y la respuesta es la misma. La premisa es que debemos basarnos en problemas claros, un análisis cuidadoso y se deben considerar varias situaciones al verificar .

Hasta ahora, se ha presentado este artículo sobre la inversión de matriz del algoritmo de javascript, espero que pueda ser útil para todos.

Reenviado de: Micro lectura    https://www.weidianyuedu.com

Supongo que te gusta

Origin blog.csdn.net/weixin_45707610/article/details/131865149
Recomendado
Clasificación