↑看個小廣告,支持好內容↑
accounts
會是一個巢狀陣列 (每一項自身也是陣列,代表某用戶的各項資產),要找的大富翁即是陣列總和值最大者,做個雙重迴圈就能解了:
// 對於每一個客戶 i (accounts.length):
1. 遍歷他的各項資產 (accounts[i].length)
2. 加總,並與當前的最大值比較
這段程式你一定會寫,但我想多提一個「迭代」的概念。
迭代的核心就是「每回合結束後都會更新結果」,上述的例子經歷了四次回合,當前最大值依序由 1、7、7、9 被更新覆蓋,當迭代一結束,最大值也找到了。
迭代的寫法:
陣列.reduce((累積值, 陣列項)=>{兩者要做的運算}, 初始值)
// 迴圈
let max=0;
for(let i=0; i<arr.length; i++){
max=Math.max(max, arr[i])
}
return max;
// 迭代
// 假設初始 max=0,每回合將 max 與陣列項相比,留下更大者
return arr.reduce((max, cur)=>Math.max(max, cur), 0);
相比於迴圈而言,程式碼是不是簡潔很多呢?試著用迭代做這一題看看!
參考程式碼:
var maximumWealth = function(accounts) {
let max=0;
for(let i=0; i<accounts.length; i++){
// 取得第i位客戶的資產總額,並與當前最大值(大富翁)比較
let sum=accounts[i].reduce((acc, curr)=>acc+curr, 0);
max=Math.max(max, sum);
}
return max;
};
Array
、Matrix
87.5%