Given an integer array nums, a reducer function fn, and an initial value init, return a reduced array.
A reduced array is created by applying the following operation: val = fn(init, nums[0]), val = fn(val, nums[1]), val = fn(val, nums[2]), … until every element in the array has been processed. The final value of val is returned.
If the length of the array is 0, it should return init.
Please solve it without using the built-in Array.reduce method.
給予一個整數陣列 arr、一個累計函數 fn,和一個初始值 init,回傳一個累計陣列。 建立一個 累計函數來運用在以下操作:val = fn(init, nums[0]), val = fn(val, nums[1]), val = fn(val, nums[2]) ...直到處理完陣列中的每個元素,並回傳 val 的最終值。 如果陣列的長度為 0,則他應該回傳 init(初始值)。 請不要使用 Array.reduce 方法來解決問題。
Example 1:
Input: nums = [1,2,3,4] fn = function sum(accum, curr) { return accum + curr; } init = 0 Output: 10
Example 2:
Input: nums = [1,2,3,4] fn = function sum(accum, curr) { return accum + curr * curr; } init = 100 Output: 130
Example 3:
Input: nums = [] fn = function sum(accum, curr) { return 0; } init = 25 Output: 25
solution:
老樣子,題目希望我們不要使用 reduce() 的方法,同時又希望回傳的是一個新的陣列,
但是這個說明應該有誤,最後應該是回傳最終值。
我們可以運用 forEach 來執行 nums 陣列中的每個 num(element),
接著將 init 的數值透過 fn(init, num) 來做累加的計算,
並將最終值回傳出來。
Code 1: BigO(n)
var reduce = function(nums, fn, init) { nums.forEach(num => { init = fn(init, num) }) return init; };
FlowChart:
Example 1
nums = [1,2,3,4] fn = function sum(accum, curr) { return accum + curr; } init = 0 fn(init, num) = return 0 + 1 = 1 fn(init, num) = return 0 + 2 = 3 fn(init, num) = return 0 + 3 = 6 fn(init, num) = return 0 + 4 = 10
Example 2
nums = [1,2,3,4] fn = function sum(accum, curr) { return accum + curr * curr; } init = 100 fn(init, num) = return 100 + 1*1 = 101 fn(init, num) = return 101 + 2*2 = 105 fn(init, num) = return 105 + 3*3 = 114 fn(init, num) = return 114 + 4*4 = 130
Example 3
nums = [] fn = function sum(accum, curr) { return 0; } init = 25 fn(init, num) = return 0 => return init //25 ex. nums為空陣列,該 forEach 沒有任何元素可以執行,故僅執行最後的 return init。