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: 582 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: 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 |
VisuAlg - Exercício Resolvido de VisuAlg - Um programa que lê três números inteiros e mostra o maior |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |