FreeCodeCamp 中级算法题 - 数组扁平化

数组扁平化 (Steamroller)

题目链接

问题解释

  • 这个 function 接受一个数组参数 arr,返回值为扁平化之后的数组
  • 如果 arr[1, [2], [[3]]],那么返回值应为 [1, 2, 3]
  • 值得注意的是,如果存在空数组,那我们不应保留,如果存在空的 Object,那我们需要保留。比如,当 arr[1, [], {}] 时,返回值应为 [1, {}]

FreeCodeCamp 中级算法题 - 按参数删除数组元素

按参数删除数组元素 (Drop it)

题目链接

问题解释

  • 这个 function 接受一个数组参数 arr 和一个函数参数 func。返回值为 arr 第一个满足参数 func 的元素及其之后的所有元素
  • 如果 arr[1, 2, 3, 4]funcfunction(n) {return n >=3;},那么此时返回值应为 [3, 4]
  • 更值得关注的是这样的情况,如果 arr[0, 1, 0, 1]funcfunction(n) {return n === 1;},那么此时返回值应为 [1, 0, 1]

FreeCodeCamp 中级算法题 - 找出数字范围的最小公倍数

找出数字范围的最小公倍数 (Smallest Common Multiple)

题目链接

问题解释

  • 这个 function 接收一个数组参数 arr,其中包含两个数字元素。返回这两个数字之间所有数的最小公倍数
  • 如果 arr[1, 5],那么返回值应为 60
  • 需要注意的是,这个 arr 是没有排序的,因此对于 [5, 1],也应该返回 60

FreeCodeCamp 中级算法题 - 斐波那契数列奇数项求和

斐波那契数列奇数项求和

题目链接

问题解释

  • 这个 function 接收一个数字参数 num。返回小于等于 num 的斐波那契数列奇数项之和
  • 如果 num1,那么返回值应为 1;如果 num4,那么返回值应为 5

思路简介

  • 整体上,思路可以有以下几种:
    • 建立三个变量,分别为当前位置的前两个数以及当前的总和。以当前值大于 num 为跳出条件,循环并动态地给这三个变量赋值,最后返回总和
    • 根据 num 建立一个斐波那契数组(可以用循环写,也可以用递归)
      • 遍历这个数组,在遍历过程中判断奇偶,求和
      • 直接用 filter 方法过滤掉偶数,然后求数组元素总和
  • 两种思路都不太难。可以先尝试一下

FreeCodeCamp 中级算法题 - 字符串格式转换 - 短线连接格式

字符串格式转换 - 短线连接格式 (Spinal Tap Case)

题目链接

问题解释

  • 这个 function 接收一个字符串参数 str。返回值为转换后的字符串
  • 如果传入的字符串是 "A Bcd",那么返回值应为 "a-bcd"
  • 这道题乍一看好像很简单,但其实还是有一点点难度的。题目的重点在于判断断线连接的位置,或者说判断单词的边界

FreeCodeCamp 中级算法题 - 转换 HTML 实体字符

转换 HTML 实体字符 (Convert HTML Entities)

题目链接

问题解释

  • 这个 function 接收一个字符串参数 str。返回值为转换后的字符串
  • 如果传入的字符串是 "Dolce & Gabbana",那么返回值应为 "Dolce & Gabbana"
  • 在这道题目中,只有以下五个字符需要转换:
    • & 需转换为 '&'
    • < 需转换为 '&lt;'
    • > 需转换为 '&gt;'
    • ' 需转换为 '&apos;'
    • " 需转换为 '&quot;'

FreeCodeCamp 中级算法题 - 多个数组元素排序

多个数组元素排序 (Sorted Union)

题目链接

问题解释

  • 这个 function 接收两个或两个以上的数组。返回值为过滤及合并之后的一维数组
  • 如果传入的是 [1, 2], [2, 3], [4, 5],那么返回值就是 [1, 2, 3, 4, 5]
  • 需要注意的是,这里不涉及到 “Flatten” (数组扁平化)。比如,传入的是 [1, 2], [[2], 3],那么返回值应该是 [1, 2, [2], 3]。这其实是一个非常深的坑,请看后面详解
  • 另外需要注意的是,参数的数量是不确定的
,