1. 程式人生 > >FCC 中級算法題 對所有的數字求和

FCC 中級算法題 對所有的數字求和

spa 所有 ocs 代碼 soft ray max() 單個 數組

題幹:

我們會傳遞給你一個包含兩個數字的數組。返回這兩個數字和它們之間所有數字的和。

最小的數字並非總在最前面。

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 中級算法題 對所有的數字求和