Введение
В этом практическом занятии мы будем изучать программирование на JavaScript, выполняя серию упражнений, направленных на формирование фундаментальных навыков. От базового синтаксиса и типов данных до более сложных концепций, таких как асинхронное программирование и функциональное программирование, это практическое занятие даст вам hands-on-опыт, который поможет вам стать опытным разработчиком на JavaScript. Независимо от того, новая вы в программировании или ищите расширение своих навыков, это практическое занятие предоставит вам инструменты, необходимые для успеха.
Алгоритм нахождения максимального подмассива
Для практики программирования откройте Терминал/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]
Резюме
Поздравляем! Вы завершили практическое занятие по нахождению максимального подмассива. Вы можете выполнить больше практических занятий в LabEx, чтобы улучшить свои навыки.