Java - la Rotation de la matrice de
Donc le but est de faire pivoter les éléments dans une rangée droite a
fois.
Comme un exemple; si a==2
, puis array = {0,1,2,3,4}
deviendrait array = {3,4,0,1,2}
Voici ce que j'ai:
for (int x = 0; x <= array.length-1; x++){
array[x+a] = array[x];
}
Toutefois, cela ne prend pas en compte lors de la [x+a]
est plus grande que la longueur du tableau. J'ai lu que je devrais stocker ceux qui sont plus dans un autre Tableau mais, voyant que a
est variable, je ne suis pas sûr que ce soit la meilleure solution.
Merci à l'avance.
- Modulo est votre ami.
x < array.length
est plus propre et plus conventionnel quex <= array.length-1
.
Vous devez vous connecter pour publier un commentaire.
Ajouter un modulo tableau de la longueur de votre code:
Vous devez également créer un nouveau
Array
de copie, de sorte que vous ne pas écraser les valeurs, que vous en aurez besoin plus tard.Dans le cas où vous ne voulez pas de réinventer la roue (c'est peut-être un exercice mais il peut être bon à savoir), vous pouvez utiliser
Collections.rotate
.Être conscient qu'il nécessite un tableau d'objets, pas de type de données primitif (sinon, vous allez swap tableaux eux-mêmes dans la liste).
Arraycopy est une opération coûteuse, à la fois du temps et de la mémoire de sage.
La suite serait un moyen efficace pour faire pivoter une matrice, sans l'aide de l'espace supplémentaire (à la différence de la accepté de répondre lorsqu'un nouveau tableau est créé de la même taille).
Une autre façon est de la copie avec Système.arraycopy.
Je pense que le moyen le plus rapide serait d'utiliser Système.arrayCopy() qui est originaire de la méthode:
Il réutilise aussi une matrice existante. Il peut être bénéfique dans certains cas.
Et le dernier avantage est temporaire taille de la matrice est moins que le tableau d'origine. De sorte que vous pouvez réduire l'utilisation de la mémoire lorsque
a
est petit.Solution Java enveloppé dans une méthode:
De Gauche Tourner à sa très simple
Prendre la différence entre la longueur du tableau et le nombre de position de changement.
Par Exemple
//imprimer la sortie
Question : https://www.hackerrank.com/challenges/ctci-array-left-rotation
Solution :
C'est de cette façon que j'ai essayé arrayLeftRotation méthode de complexité o(n)
2ème fois pour les 0 à kth indice
public static int[] arrayLeftRotation(int[] a, int n, int k) {
int[] resultArray = new int[n];
int arrayIndex = 0;
//première n-k indices seront remplies dans cette boucle
for(int i = k ; i
resultArray[arrayIndex] = a[i];
arrayIndex++;
}
//2e k indices seront remplies dans cette boucle
for(int j=arrayIndex ; j<(arrayIndex+k); j++){
resultArray[j]=a[j-(n-k)];
}
retour resultArray;
}
Dans ruby rotation d'un tableau peut être possible dans une ligne.
Question : Rotation de la table donnée une distance spécifique .
Méthode 1 :
Mettez l'int tableau ArrayList. Ensuite, l'utilisation des Collections.tourner(liste,de la distance).
Complexité temporelle = O(n)
Espace Complexité = O(1)
L'algorithme commence avec le premier élément du tableau (newValue) et le place à sa position après la rotation (newIndex). L'élément qui est à la newIndex devient oldValue. Après cela, oldValue et newValue sont inversés.
Cette procédure se répète longueur de temps.
L'algorithme fondamentalement rebondit autour de la matrice de mise en place de chaque élément à sa nouvelle position.