JavaScript 基础编程练习

JavaScriptJavaScriptBeginner
立即练习

This tutorial is from open-source community. Access the source code

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本实验中,我们将通过完成一系列旨在帮助培养基本技能的练习来探索 JavaScript 编程。从基本语法和数据类型到异步编程和函数式编程等更高级的概念,本实验将提供实践经验,帮助你成为一名熟练的 JavaScript 开发者。无论你是编程新手还是希望扩展技能,本实验都将为你提供成功所需的工具。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL javascript(("JavaScript")) -.-> javascript/BasicConceptsGroup(["Basic Concepts"]) javascript(("JavaScript")) -.-> javascript/AdvancedConceptsGroup(["Advanced Concepts"]) javascript/BasicConceptsGroup -.-> javascript/variables("Variables") javascript/BasicConceptsGroup -.-> javascript/data_types("Data Types") javascript/BasicConceptsGroup -.-> javascript/arith_ops("Arithmetic Operators") javascript/BasicConceptsGroup -.-> javascript/comp_ops("Comparison Operators") javascript/BasicConceptsGroup -.-> javascript/cond_stmts("Conditional Statements") javascript/AdvancedConceptsGroup -.-> javascript/spread_rest("Spread and Rest Operators") subgraph Lab Skills javascript/variables -.-> lab-28492{{"JavaScript 基础编程练习"}} javascript/data_types -.-> lab-28492{{"JavaScript 基础编程练习"}} javascript/arith_ops -.-> lab-28492{{"JavaScript 基础编程练习"}} javascript/comp_ops -.-> lab-28492{{"JavaScript 基础编程练习"}} javascript/cond_stmts -.-> lab-28492{{"JavaScript 基础编程练习"}} javascript/spread_rest -.-> lab-28492{{"JavaScript 基础编程练习"}} end

最大子数组算法

要练习编码,请打开终端/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 中练习更多实验来提升你的技能。