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: 642 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.
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 |
|
Android Java - Como usar o método startActivity() da classe Activity ou AppCompatActivity do Android para mudar de telas |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |





