Estoy publicando mis soluciones a los desafíos de HackerRank como una forma de mejorar mi aprendizaje, reforzar mi conocimiento y establecer una comprensión de los conceptos cubiertos. Si ayudo a alguien compartiendo en el camino, ¡aún mejor!
Left Rotation es uno de los desafíos iniciales con dificultad 'EASY'.
Una operación de rotación a la izquierda en una matriz desplaza cada elemento de la matriz a la izquierda. Por ejemplo, si se realizan dos rotaciones a la izquierda en la matriz [1, 2, 3, 4, 5]
, la matriz se convierte en [3, 4, 5, 1, 2]
.
Dada una matriz a
de n
enteros y un número, d
, de rotaciones a la izquierda en la matriz. Devuelve la matriz actualizada para que se imprima como una sola línea de números enteros separados por espacios.
Una función que devuelve una matriz de enteros después de que se hayan realizado las rotaciones a la izquierda.
1 <= n <= 10 ^ 5
1 <= d <= n
1 <= a [i] <= 10 ^ 6
1 2 3 4 5
4
5 1 2 3 4
function leftRotation (a , d ) {
return a .concat (a .splice (0 , d ));
}
Toda la lógica está contenida en esta única línea, pero podemos dividirla en tres partes:
Primero usé .splice()
para obtener los primeros elementos d
en la matriz a[0 - d]
. Al comienzo del desafío, se informa el siguiente límite que define esta lógica 1 <= d <= n
, es decir, no necesito preocuparme por rotar la matriz para la izquierda más veces que los elementos de la matriz.
Luego usé .concat()
para concatenar (o fusionar) lo que queda de a
, o todo después de a[d]
, con lo que separados en el primer paso a[0 - d]
.
Y luego termino la función devolviendo esta matriz recién ordenada.
Otros idiomas que hablo
def leftRotation (a , d )
a .rotate (d )
end
def leftRotation (a , d ):
return a [a : ] + a [: a ]
func leftRotation (a [] int32 , d int32 ) []int32 {
return append (a [d : ], a [: d ]... )
}
def leftRotation (a : Array [Int ], d : Int ): Array [Int ] = {
return a .drop (d )++ a .take (d );
}
static int leftRotation (int [] a , int d ) {
int [] rotated = new int [a .length ];
for (int i = 0 ; i < a .length ; i++ ) {
rotated[(i + a .length - d ) % a .length ] = a [i];
}
return rotated;
}
function leftRotation ($a , $d ) {
return array_merge (array_splice ($a , $d , count ($a )), array_splice ($a , 0 , $d ));
}
Pensamiento: Prefiero ser un hombre de paradojas que un hombre de prejuicios.