算法:最富有客户的资产总量

发布时间:2026/7/9 1:51:15
算法:最富有客户的资产总量 给你一个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以下是求解模块解法一双层for循环class Solution { public: int maximumWealth(vectorvectorint accounts) { int maxWealth 0; for (const auto customer : accounts) { int sum 0; for (int money : customer) { sum money; } if (sum maxWealth) { maxWealth sum; } } return maxWealth; } };解法二使用标准库#include numeric class Solution { public: int maximumWealth(vectorvectorint accounts) { int maxWealth 0; for (const auto customer : accounts) { int sum accumulate(customer.begin(), customer.end(), 0); maxWealth max(maxWealth, sum); } return maxWealth; } };解法三双指针下标遍历class Solution { public: int maximumWealth(vectorvectorint accounts) { int maxWealth 0; for (int i 0; i accounts.size(); i) { int sum 0; for (int j 0; j accounts[i].size(); j) { sum accounts[i][j]; } maxWealth max(maxWealth, sum); } return maxWealth; } };时间复杂度O(m × n)m为客户数行数n为银行数列数。必须遍历矩阵中的每一个数字才能求和无法再优化。空间复杂度O(1)除了输入数组只使用了几个临时变量sum,maxWealth没有额外申请与数据规模相关的数组。注意点空矩阵accounts为空accounts.size() 0。此时maxWealth 0直接返回 0 即可。标准写法中的for循环不会执行自动返回 0完全安全。某一行不为空但客户存款为 0题目规定金额 1所以不用担心负数。如果题目允许负数maxWealth必须初始化为INT_MIN极小值否则结果永远是 0。二维数组行列的获取行数客户数accounts.size()列数银行数accounts[0].size()前提是确保accounts不为空const auto的妙用外层循环for (const auto customer : accounts)中引用避免了复制整行vector提升性能const保证不会意外修改数据这是 C 的好习惯。