一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第14天,点击查看活动详情
测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。
怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~
一、题目描述:
-
题目内容
-
题目示例
-
题目解析
- 本题给出一个二维数组accounts参数。
- accounts、accounts[i]的长度都在[1,51]
- accounts[i][j] 元素是int,范围在[1,101]
二、思路分析:
我们拿到本题,该题给出的一个二维数组accounts,要求求出accounts[i]中元素和最大的。
看完示例,我们脑袋里马上就有了方法,模拟求和:
- 使用两个for循环进行遍历二维数组accounts.
- 第一层for循环取出二维数组accounts每一行的元素列表accounts[i]
- 第二层for循环对accounts[i]取出里面的每一个元素accounts[i][j]
- 使用一个临时变量Sum对account[i]里的元素进行求和运算
- 对每一次的求和Sum 与ans进行比较,ans每一次取最大值
- 直到遍历完所有的accounts的元素,返回ans
根据以上思路,我们使用两个for循环就能快速实现该题,代码如下:
ans = 0
for i in range(len(accounts)):
Sum = 0
for j in range(len(accounts[i])):
Sum = Sum + accounts[i][j]
ans = max(ans,Sum)
return ans
复制代码
两个for循环虽然能解答该题,但是运行时间非常慢了。那么还有其他方法吗?
- 我们可以对上述方法进行优化,只用使用一个for循环
- 一个for循环取出accounts的元素,也就是account[i]
- 直接使用求和函数sum()对accounts[i]求和
- 临时变量ans 与 sum(account[i]) 最大值比较
- 直到遍历完整改accounts数组,返回结果ans
ans = 0
for i in accounts:
ans = max(ans,sum(i))
return ans
复制代码
最后,其实解答该题我们完全可以只用一行代码就可以解决
- 推导式
return max(sum(i) for i in accounts)
复制代码
三、总结:
我们只使用一个for循环,提交代码,AC记录如下:
时间复杂度O(N),accounts数组的长度 空间复杂度O(1)
以上是本期内容,欢迎大佬们点赞评论,下期见~~~