Red de conocimiento informático - Aprendizaje de código fuente - ¿Cómo desplazar una matriz?

¿Cómo desplazar una matriz?

//Tomar desplazamiento a la derecha como ejemplo?coded?by?passerby

/*

Método 1: mover la matriz un bit hacia la derecha cada vez , moverse k veces

Complejidad del tiempo: O(k*n)?

Complejidad del espacio: O(1)?

*/?

void?rightShift1(int?a[],?int?n,?int?k)

{ k=k%n;? mientras(k--) {? a[n-1]; para(int?i=n-1;i>0;i--)

a[i]=a[i-1]; }

}

/*

Método 2: ¿Usar una matriz auxiliar?

Complejidad temporal: ¿O(n)? /p>

Complejidad del espacio: O(n)?

*/

void?rightShift2(int?a[],?int?n,?int? k)

{ int?b[n];?//Este tipo de inicialización no está estandarizada k=k%n for(int?i=0;i

}

//¿Inversa?

void?reverse(int?a[],?int?sta , ?int?end)?//¿Intervalo abierto izquierdo y cerrado derecho?[sta,end)

{ end-=1;? while(sta

}?

/*

Método 3: ¿Uso inteligente de la inversión? Orz

Complejidad temporal: ¿O(n)?

Complejidad espacial: ¿O(1)?

*/

void?rightShift3(int?a[],?int?n,?int?k)

{ k=k%n inversa(a,?0,?n-k); revertir(a,?n-k,?n); revertir(a,?0?,?n);

}