最富有客户的资产总量

标签: 数组 矩阵

难度: Easy

给你一个 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

Submission

运行时间: 17 ms

内存: 16.2 MB

class Solution:
    def maximumWealth(self, accounts: List[List[int]]) -> int:
        num = [0 for _ in range(len(accounts))]
        for i in range(len(accounts)):
            num[i] = sum(accounts[i])
        return max(num)

Explain

题解的核心思路是遍历每一位客户的银行账户,计算每位客户的资产总和,然后找出这些总和中的最大值。首先,初始化一个列表来存储每位客户的资产总和。遍历每个客户的账户,利用 Python 的内置函数 sum() 计算每行的资产总和,并将结果存储到初始化的列表中。最后,使用 max() 函数获取这个列表中的最大值,即为最富有客户的资产总量。

时间复杂度: O(m*n)

空间复杂度: O(m)

class Solution:
    def maximumWealth(self, accounts: List[List[int]]) -> int:
        # 创建一个列表用于存储每位客户的资产总和
        num = [0 for _ in range(len(accounts))]
        # 遍历每个客户的账户,计算资产总和
        for i in range(len(accounts)):
            num[i] = sum(accounts[i])
        # 返回资产总和中的最大值
        return max(num)

Explore

Python的sum()函数基本上是通过遍历列表中的每个元素,累加其值来计算总和的。虽然这个过程是在Python的内部C级别代码中实现的,使得其运行速度比纯Python代码快,但从算法的角度来看,它仍然是一个线性时间复杂度的操作,即O(n),其中n是列表中的元素数量。因此,sum()函数的核心实现仍然是基于元素的遍历。

题解中的for循环遍历每个客户的账户列表,计算每个客户的资产总和。如果accounts列表非常大,即客户数量很多,这种方法的性能会受到一定的影响。具体来说,时间复杂度为O(m*n),其中m是客户数量,n是每个客户的账户数量。每次计算一个客户的资产总和是O(n)的操作,需要对所有m个客户都进行一次,所以总体上是线性关系。对于非常大的数据集,这种方法可能会导致性能瓶颈,尤其是在每个客户账户数量也较大的情况下。

是的,可以优化算法以避免存储每个客户的资产总和,而只在遍历过程中直接维护一个最大值。这可以通过初始化一个变量来存储当前的最大资产总和,然后在遍历每个客户的账户时,计算其资产总和,并与当前存储的最大值进行比较,如果更大,则更新这个最大值。这样,我们只需要一个变量来存储最大值,从而减少空间复杂度到O(1),同时保持时间复杂度为O(m*n)。具体代码可以修改为: python class Solution: def maximumWealth(self, accounts: List[List[int]]) -> int: max_wealth = 0 for account in accounts: current_wealth = sum(account) if current_wealth > max_wealth: max_wealth = current_wealth return max_wealth 这种方法更加内存效率高,特别是在处理大量数据时。