题目描述:计算最富有客户的资产总量
举例
输入:accounts = [[1,5],[7,3],[3,5]]
输出:10
解释:
第 1 位客户的资产总量 = 6
第 2 位客户的资产总量 = 10
第 3 位客户的资产总量 = 8
第 2 位客户是最富有的,资产总量是 10
我的解答:
class Solution:
def maximumWealth(self, accounts: List[List[int]]) -> int:
# 初始化 wealth 列表
wealth=[]
# 对 accounts 列表进行遍历,计算每个用户的账户余额总和,并将其存储在 wealth 列表中
for i in range(len(accounts)):
a=0
for j in range(len(accounts[i])):
a=a+accounts[i][j]
wealth.append(a)
# 返回 wealth 列表中最大的账户余额总和
return max(wealth)
该代码定义了一个 Solution
类,其中包含了一个 maximumWealth
方法。这个方法接收一个二维列表 accounts
作为输入参数,并返回最大的账户余额总和。在方法中,我们遍历整个 accounts
列表,计算每个用户的账户余额总和,并将其存储在一个新的列表 wealth
中。然后,我们使用 Python 内置函数 max()
来找到 wealth
列表中最大的元素,并返回它作为输出结果。
时间空间复杂度:
这段代码的时间复杂度为 O(n^2),其中 n 表示 accounts 列表中所有子列表元素的个数之和。这是因为代码中有两层循环嵌套,分别对应行和列的遍历。在最坏情况下,需要遍历二维列表中的每个元素,因此时间复杂度为 O(n^2)。
空间复杂度同样为 O(n),因为我们创建了一个新的列表 wealth 来存储每个用户的账户余额总和,它的长度等于 accounts 中所有元素的数量之和,即 n。
优化:
class Solution:
def maximumWealth(self, accounts: List[List[int]]) -> int:
# 初始化最大账户余额总和为 0
max_wealth = 0
# 遍历 accounts 列表,计算每个用户的账户余额总和
for customer in accounts:
# 使用 sum() 函数来计算每个子列表中元素的总和
wealth = sum(customer)
# 更新最大账户余额总和
if wealth > max_wealth:
max_wealth = wealth
# 返回最大账户余额总和
return max_wealth
使用 Python 内置函数 sum()
来计算每个子列表中元素的总和,而不是手动遍历每个元素并逐个相加。另外,我们还可以使用列表推导式来简化代码,并且用一个变量 max_wealth
来存储当前发现的最大余额总和,从而省略创建一个额外的列表。。它只需要遍历一次 accounts 列表,而不是两次,因此时间复杂度为 O(n),其中 n 表示 accounts 列表中所有元素的数量之和。这比原来的代码的时间复杂度要低得多。