Você está aqui: Java ::: Desafios e Lista de Exercícios Resolvidos ::: Arrays e Matrix (Vetores e Matrizes) |
Como rotacionar os elementos de um vetor de inteiros n vezes para a direita - Solução usando inversão do array - Desafio de Programação Resolvido em JavaQuantidade de visualizações: 701 vezes |
|
Pergunta/Tarefa: Dado o vetor:
// vamos criar um vetor de inteiros
int valores[] = {1, 6, 9, 3, 7, 8, 5, 2};
Importante: a solução que apresentamos nesta dica usa uma técnica que consiste em inverter o array 3 vezes. Na primeira vez todo o vetor é invertido. Na segunda vez apenas os n elementos são invertidos. Finalmente, o restante dos elementos quant - n são invertidos. Aqui n representa a quantidade de rotações que serão feitas e quant é a quantidade de elementos no array. Na pesquisa que fizemos, essa é forma mais eficiente de resolver este desafio. Sua saída deverá ser parecida com: Array na ordem original: 1 6 9 3 7 8 5 2 Primeira inversão do array 2 5 8 7 3 9 6 1 Segunda inversão do array 8 5 2 7 3 9 6 1 Terceira inversão do array 8 5 2 1 6 9 3 7 Array depois de rotacionar 3 vezes: 8 5 2 1 6 9 3 7 Veja a resolução comentada deste exercício em Java: ----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
package estudos;
public class Estudos {
public static void main(String[] args) {
// vamos criar um vetor de inteiros
int valores[] = {1, 6, 9, 3, 7, 8, 5, 2};
// mostramos o array na ordem original
System.out.println("Array na ordem original:");
exibirVetor(valores);
// vamos rotacionar o array 3 casas para a direita
valores = rotacionarArray(valores, 3);
// e mostramos o resultado
System.out.println("Array depois de rotacionar 3 vezes:");
exibirVetor(valores);
}
// método usado para exibir o array
public static void exibirVetor(int []vetor){
// percorremos cada elemento do vetor
for (int i = 0; i < vetor.length; i++) {
System.out.print(vetor[i] + " ");
}
System.out.println("\n");
}
// método que recebe um vetor de inteiros e o rotaciona um
// determinado número de vezes
public static int[] rotacionarArray(int[] vetor, int n) {
// vamos obter o tamanho do array
int quant = vetor.length;
// se a quantidae de rotações for maior que o número
// de elementos no vetor, usamos o operador de módulo
// para ajustar
if(n > quant){
n = n % quant;
}
// primeira inversão do vetor
vetor = inverterArray(vetor, 0, quant - 1);
System.out.println("Primeira inversão do array");
exibirVetor(vetor);
// segunda inversão do array
vetor = inverterArray(vetor, 0, n - 1);
System.out.println("Segunda inversão do array");
exibirVetor(vetor);
// terceira inversão do array
vetor = inverterArray(vetor, n, quant - 1);
System.out.println("Terceira inversão do array");
exibirVetor(vetor);
// retorna o vetor rotacionado
return vetor;
}
// método que recebe um vetor e o devolve invertido
public static int[] inverterArray(int[] vetor,int inicio,int fim){
// enquanto início for menor ou igual a fim
while(inicio <= fim){
int temp = vetor[inicio];
vetor[inicio] = vetor[fim];
vetor[fim] = temp;
inicio++;
fim--;
}
// retorna o vetor invertido
return vetor;
}
}
A solução que apresentamos aqui usa a inversão de array, o que torna essa abordagem uma das mais eficientes. Em outras dicas do site nós apresentamos uma solução para este desafio usando força-bruta. A força-bruta não é a melhor abordagem, mas pode ser mais fácil de ser entendida por iniciantes em programação. |
|
|
Mais Desafios de Programação e Exercícios e Algoritmos Resolvidos de Java |
Veja mais Dicas e truques de Java |
Dicas e truques de outras linguagens |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |





