Você está aqui: Java ::: Desafios e Lista de Exercícios Resolvidos ::: Arrays e Matrix (Vetores e Matrizes)

Como encontrar a soma máxima em uma subsequência de tamanho k em Java - Programação Dinâmica em Java - Lista de Exercícios Resolvidos de Java

Quantidade de visualizações: 532 vezes
Pergunta/Tarefa:

Este desafio, presente em quase todos os livros de programação dinâmica em Java, envolve encontrar a soma máxima em um subarray contíguo, ou seja, de elementos consecutivos, obedecendo a um tamanho k.

O tamanho k determina a quantidade de elementos que a subsequencia pode ter. É possível ter mais de um subarray de tamanho k que contenha a soma máxima, mas o exercício pede para retornar apenas a soma máxima. Em outras abordagens do site eu mostro como retornar a quantidade de subarrays e até mesmo os índices de início e término de cada uma dessas subsequencias.

Assim, dado o vetor v[] de números inteiros [-7, 1, 3, 11, 5, -4, 9, 2], encontre a maior soma que pode ser obtida por uma sequencia contígua de 3 elementos.

Sua saída deverá ser parecida com:

O conteúdo do array é: [-7, 1, 3, 11, 5, -4, 9, 2]
A soma máxima é: 19
Embora o exercício não peça para mostrar a sub-sequência com a maior soma, você pode fazer o teste de mesa no algorítmo e verificar que o sub-array de 3 elementos que contém a soma máxima é [3, 11, 5]

Resposta/Solução:

Veja a resolução comentada deste exercício usando Java:

Atenção: Existem muitos algorítmos 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 algorítmo aplicado.

package estudos;

import java.util.Arrays;

public class Estudos{
  public static void main(String args[]){
    // vamos criar um vetor com 8 elementos
    int valores[] = {-7, 1, 3, 11, 5, -4, 9, 2};
    // vamos mostrar os valores do array
    System.out.println("O conteúdo do array é: " +
      Arrays.toString(valores));
    
    // definimos o tamanho da subsequencia
    int k = 3;
    // e o tamanho do vetor
    int n = valores.length;
 
    // e chamamos a função que retorna a soma máxima
    int soma_maxima = soma_maxima_subarray_k(valores, n, k);
    // finalmente mostramos o resultado
    System.out.println("A soma máxima é: " + soma_maxima);
  }
  
  // método que recebe um vetor v e um número inteiro
  // k e retorna a maior soma que pode ser obtida por
  // uma subsequencia contígua de tamanho k
  static int soma_maxima_subarray_k(int arr[], int n, int k){
    // o primeiro passo é declarar a soma
    // máxima como 0
    int soma_maxima = 0;
    
    // agora percorremos os elementos do vetor, começando
    // no primeiro e indo até o elemento indicado pelo
    // tamanho do array menos o k
    for (int i = 0; i <= n - k; i++) {
      // criamos uma variável temporário com valor 0
      int soma_temp = 0;
      
      // fazemos a soma dos elementos começando no
      // índice i atual e percorrendo
      // a quantidade de elementos k
      for (int j = i; j < i + k; j++) {
        // adicionamos o valor do elemento no índice j
        // à soma temporária
        soma_temp += arr[j];
      }
      
      // a soma temporária é maior que a soma
      // que já temos?
      if (soma_temp > soma_maxima) {
        // a nova soma é a soma temporária
        soma_maxima = soma_temp;
      }
    }
 
    // retorna a soma máxima
    return soma_maxima;
  }
}


Link para compartilhar na Internet ou com seus amigos:

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

E-Book 350 Exercícios Resolvidos de Java - PDF com 500 páginas
Domine lógica de programação e a linguagem Java com o nosso E-Book 350 Exercícios Exercícios de Java, para você estudar onde e quando quiser.

Este e-book contém exercícios resolvidos abrangendo os tópicos: Java básico, matemática e estatística, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book
E-Book 650 Dicas, Truques e Exercícios Resolvidos de Python - PDF com 1.200 páginas
Domine lógica de programação e a linguagem Python com o nosso E-Book 650 Dicas, Truques e Exercícios Exercícios de Python, para você estudar onde e quando quiser.

Este e-book contém dicas, truques e exercícios resolvidos abrangendo os tópicos: Python básico, matemática e estatística, banco de dados, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 24 usuários muito felizes estudando em nosso site.