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

Sum All Numbers in a Range

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

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

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])thisArgfun 函数运行时指定的 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]);

 

转载于:https://www.cnblogs.com/lailailee/p/7265830.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值