FCC 中級算法題 對所有的數字求和
阿新 • • 發佈:2017-08-01
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 中級算法題 對所有的數字求和