首页 > 代码库 > FCC 中级算法题 对所有的数字求和

FCC 中级算法题 对所有的数字求和

题干:

我们会传递给你一个包含两个数字的数组。返回这两个数字和它们之间所有数字的和。

最小的数字并非总在最前面。

1 function sumAll(arr) {
2   return 1;
3 }
4 
5 sumAll([1, 4]);

会用到的函数

Math.max()

Math.min()

Array.reduce()

思路:

(1)通过Math.max(),Math.min()抽出数组中的最大值max和最小值min;

(2)创建新数组获取最小值和最大值之间的数值;

(3)利用Array.reduce()对新数组进行累加。

知识点:

(1)Math.max(),Math.min()不能接受数组作参数,Math.max(array)这种操作是不存在的;

而apply是所有函数都有的方法,fun.apply(thisArg, [argsArray])thisArg相当于在 fun 函数运行时指定的 this ,

argsArray一个数组或者类数组对象,其中的数组元素将作为单独的参数传给 fun 函数;
1  function getMaxOfArray(numArray) {
2         return Math.max.apply(null, numArray);
3     }

这个函数用for循环也可以实现,但是太过繁琐。

(2)reduce()方法可以对数组的每一个元素进行操作,下面代码中value是单个元素的值,sum则是这些元素的累加值;

1 var total = arr.reduce(function (sum, value) {
2        return sum + value;
3      }, 0);

我的代码:

 1 function sumAll(arr) {
 2     function getMaxOfArray(numArray) {
 3         return Math.max.apply(null, numArray);
 4     }
 5 
 6     function getMinOfArray(numArray) {
 7         return Math.min.apply(null, numArray);
 8     }
 9     var max = getMaxOfArray(arr);
10     var min = getMinOfArray(arr);
11     var array = [];
12 
13     for (var i = min; i <= max; i++) {
14         arr[i - min] = i;
15     }
16     var total = arr.reduce(function (sum, value) {
17         return sum + value;
18     }, 0);
19 
20     return total;
21 }
22 sumAll([1, 4]);

 

FCC 中级算法题 对所有的数字求和