1672. 最富有客户的资产总量

202 阅读1分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 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.length
    • n == accounts[i].length
    • 1 <= m, n <= 50
    • 1 <= 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方法,接受一个函数参数和一个累加初始值,参数函数也接受两个参数,代表数组的当前项和下一项。需要返回当前项和下一项的和做累加操作
  • 达不到双百,单百就行吧
  • 简单难度,更多解题方式,移步题解区

image.png