Introdução
Neste laboratório, exploraremos a programação JavaScript, completando uma série de exercícios projetados para ajudar a construir habilidades fundamentais. Da sintaxe básica e tipos de dados a conceitos mais avançados como programação assíncrona e programação funcional, este laboratório fornecerá experiência prática que o ajudará a se tornar um desenvolvedor JavaScript proficiente. Seja você novo na programação ou esteja procurando expandir suas habilidades, este laboratório lhe dará as ferramentas necessárias para ter sucesso.
Algoritmo de Subarray Máximo
Para praticar a codificação, abra o Terminal/SSH e digite node. Este algoritmo encontra um subarray contíguo com a maior soma dentro de um array de números. Para implementar este algoritmo, siga estes passos:
- Use uma abordagem greedy (gananciosa) para acompanhar a
sum(soma) atual e o máximo atual,maxSum. DefinamaxSumcomo-Infinitypara garantir que o maior valor negativo seja retornado, se todos os valores forem negativos. - Defina variáveis para acompanhar o índice inicial máximo,
sMax, o índice final máximo,eMax, e o índice inicial atual,s. - Use
Array.prototype.forEach()para iterar sobre os valores e adicionar o valor atual àsum. - Se a
sumatual for maior quemaxSum, atualize os valores dos índices e omaxSum. - Se a
sumestiver abaixo de0, reinicie-a para0e atualize o valor despara o próximo índice. - Use
Array.prototype.slice()para retornar o subarray indicado pelas variáveis de índice.
Aqui está o código JavaScript para o algoritmo:
const maxSubarray = (...arr) => {
let maxSum = -Infinity,
sum = 0;
let sMax = 0,
eMax = arr.length - 1,
s = 0;
arr.forEach((n, i) => {
sum += n;
if (maxSum < sum) {
maxSum = sum;
sMax = s;
eMax = i;
}
if (sum < 0) {
sum = 0;
s = i + 1;
}
});
return arr.slice(sMax, eMax + 1);
};
Aqui está um exemplo de como usar a função:
maxSubarray(-2, 1, -3, 4, -1, 2, 1, -5, 4); // [4, -1, 2, 1]
Resumo
Parabéns! Você concluiu o laboratório de Subarray Máximo. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.