一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情
一、题目描述(点击查看)
- 给你一个 m x n 的整数网格 accounts ,其中 accounts[i][j] 是第 i位客户在第 j 家银行托管的资产数量。返回最富有客户所拥有的 资产总量 。
- 客户的 资产总量 就是他们在各家银行托管的资产数量之和。最富有客户就是 资产总量 最大的客户。
- 示例 1:
- 输入: accounts = [[1,2,3],[3,2,1]]
- 输出: 6
- 解释:
- 第 1 位客户的资产总量 = 1 + 2 + 3 = 6
- 第 2 位客户的资产总量 = 3 + 2 + 1 = 6
- 两位客户都是最富有的,资产总量都是 6 ,所以返回 6 。
- 示例 2:
- 输入: accounts = [[1,5],[7,3],[3,5]]
- 输出: 10
- 解释:
- 第 1 位客户的资产总量 = 6
- 第 2 位客户的资产总量 = 10
- 第 3 位客户的资产总量 = 8
- 第 2 位客户是最富有的,资产总量是 10
- 示例 3:
- 输入: accounts = [[2,8,7],[7,1,3],[1,9,5]]
- 输出: 17
- 提示:
m == accounts.lengthn == accounts[i].length1 <= m, n <= 501 <= accounts[i][j] <= 100
二、思路分析:
- 每一个子数组代表一个客户,每个子数组的和代表这个客户的所有资产总数
- 题目要求返回最富有客户的资产总量,就是求出二维数组的子数组最大值
- 好了,题目分析完毕,怎么求出所有子数组的最大值
- 遍历数组,将每个子数组的值相加,然后再找到相加后的最大值返回
- 利用数组的
reduce方法很容易获得每个子数组的和 - 找到所有子数组和的最大值
- 第一种:定义一个数组变量,将每个子数组的和求出后添加到这个变量中,然后将这个保存所有子数组和的数组排序,返回这个数组的最大值
- 第二种:利用
Math.max方法,将每次得到的和两两比较,返回最大的,就是所有子数组的最大和
三、AC 代码:
- 第一种
function maximumWealth(accounts: number[][]): number {
let result = [];
accounts.forEach(item => {
let count = item.reduce((next: number, current: number) => {
return next + current;
}, 0)
result.push(count)
})
result.sort((a, b) => b - a);
return result[0]
};
- 第二种
function maximumWealth(accounts: number[][]): number {
let result = 0;
accounts.forEach(item => {
let count = item.reduce((next: number, current: number) => {
return next + current;
}, 0)
result = Math.max(result, count)
})
return result
};
四、总结:
- 数组
reduce方法,接受一个函数参数和一个累加初始值,参数函数也接受两个参数,代表数组的当前项和下一项。需要返回当前项和下一项的和做累加操作 - 达不到双百,单百就行吧
- 简单难度,更多解题方式,移步题解区