zoukankan      html  css  js  c++  java
  • 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]);
  • 相关阅读:
    【Java每日一题】20161227
    【Java每日一题】20161226
    【Java每日一题】20161223
    【Java每日一题】20161222
    【Java每日一题】20161221
    【Java每日一题】20161220
    【Java每日一题】20161219
    【Java每日一题】20161216
    【Java每日一题】20161215
    【Java每日一题】20161214
  • 原文地址:https://www.cnblogs.com/lailailee/p/7265830.html
Copyright © 2011-2022 走看看