简介
在本实验中,我们将通过完成一系列旨在帮助培养基本技能的练习来探索 JavaScript 编程。从基本语法和数据类型到异步编程和函数式编程等更高级的概念,本实验将提供实践经验,帮助你成为一名熟练的 JavaScript 开发者。无论你是编程新手还是希望扩展技能,本实验都将为你提供成功所需的工具。
最大子数组算法
要练习编码,请打开终端/SSH 并输入 node。此算法用于在一个数字数组中找到具有最大和的连续子数组。要实现此算法,请按照以下步骤操作:
- 使用贪心算法来跟踪当前的
sum和当前的最大值maxSum。将maxSum设置为-Infinity,以确保如果所有值都是负数,则返回最高的负值。 - 定义变量来跟踪最大起始索引
sMax、最大结束索引eMax和当前起始索引s。 - 使用
Array.prototype.forEach()遍历数组中的值,并将当前值加到sum中。 - 如果当前的
sum大于maxSum,则更新索引值和maxSum。 - 如果
sum小于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 中练习更多实验来提升你的技能。