Алгоритм нахождения максимального подмассива
Для практики программирования откройте Терминал/SSH и введите node
. Этот алгоритм находит непрерывный подмассив с наибольшей суммой в массиве чисел. Чтобы реализовать этот алгоритм, следуйте шагам:
- Используйте жадный подход для отслеживания текущей
суммы
и текущего максимума, maxSum
. Установите maxSum
в -Infinity
, чтобы гарантировать возврат наибольшего отрицательного значения, если все значения отрицательные.
- Определите переменные для отслеживания максимального индекса начала,
sMax
, максимального индекса конца, eMax
и текущего индекса начала, s
.
- Используйте
Array.prototype.forEach()
, чтобы перебрать значения и добавить текущее значение к сумме
.
- Если текущая
сумма
больше maxSum
, обновите значения индексов и maxSum
.
- Если
сумма
меньше 0
, сбросьте ее до 0
и обновите значение s
до следующего индекса.
- Используйте
Array.prototype.slice()
, чтобы вернуть подмассив, указанный переменными индексов.
Вот JavaScript-код для алгоритма:
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);
};
Вот пример использования этой функции:
maxSubarray(-2, 1, -3, 4, -1, 2, 1, -5, 4); // [4, -1, 2, 1]