Você está aqui: Java ::: Desafios e Lista de Exercícios Resolvidos ::: Arrays e Matrix (Vetores e Matrizes) |
Como encontrar o número de subsequências de soma igual a k em Java - Programação Dinâmica em Java - Desafio de Programação Resolvido em JavaQuantidade de visualizações: 433 vezes |
Pergunta/Tarefa: O desafio de se encontrar o número de sub-arrays ou sub-vetores que contenham uma soma igual a um determinado número está presente em praticamente todas as listas de exercícios para a prática de programação dinâmica em Java. Este problema consiste em, dado um vetor v[], você deve retornar a quantidade de subsequências de soma igual a um determinado número k. Os sub-arrays incluídos na contagem devem ser contíguos, ou seja, os elementos da subsequência deverão estar consecutivos no vetor original. Então, dado o vetor [5, 1, 2, 4, 3, -1, 4], encontre a quantidade de subarrays cuja soma dos elementos seja igual a 6. Sua saída deverá ser parecida com: O vetor é: [5, 1, 2, 4, 3, -1, 4] Encontrei 4 subarrays com a soma indicada [5, 1] [2, 4] [4, 3, -1] [3, -1, 4] Resposta/Solução: Veja a resolução comentada deste exercício usando Java: Atenção: Existem muitos algoritmos refinados para uma solução mais eficiente deste problema. Aqui eu apresento a solução usando força-bruta. Essa é a forma mais ineficiente e que consome mais tempo e recursos da máquina. No entanto, esta é também a forma mais fácil de entender o algoritmo aplicado. ---------------------------------------------------------------------- Precisa de ajuda? Chama no WhatsApp +55 (62) 98553-6711 (Osmar) Este código foi útil? Paga um cafezinho pra mim :-( PIX: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- package estudos; import java.util.Arrays; public class Estudos { public static void main(String[] args) { // vamos criar um array com 7 elementos int valores[] = {5, 1, 2, 4, 3, -1, 4}; System.out.println("O vetor é: " + Arrays.toString(valores)); // agora vamos encontrar a quantidade de subsequências // de elementos consecutivos com soma igual a 6 int quant_subarrays = quantSubarraysSoma(valores, 6); System.out.println("Encontrei " + quant_subarrays + " subarrays com a soma indicada"); } // este método Java recebe um array e um número K e retorna // a quantidade de subsequências do vetor que possuem soma // igual a K public static int quantSubarraysSoma(int[] vetor, int numero) { // primeiro obtemos a quantidade de elemetos no array int n = vetor.length; // ajustamos o contador para 0 int contador = 0; // um laço externo que percorre todos os elementos // do array, do primeiro até o último for (int i = 0; i < n; i++) { // para cada i nós percorremos a partir dele até o final // do vetor for (int j = i; j < n; j++) { // ajustamos a soma para zero int soma = 0; // percorremos o vetor a partir do índice i até // o índice j for (int k = i; k <= j; k++) { // e aumentamos a soma soma += vetor[k]; } // a soma é igual ao número recebido? if (soma == numero){ // aumentamos o contador contador = contador + 1; } } } // retornamos a contagem return contador; } } |
![]() |
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 |