最小值、最大值、总和与累计总计
单次遍历聚合列表
最小值、最大值、总和与累计总计 是 CoddyKit 上的免费 Coding Interview Prep 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Coding Interview Prep 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Coding Interview Prep 课程共包含 4 节课。
一次遍历完成聚合
许多问题只需要从数组中得到一个数字。Python 的内置函数可以在一次快速遍历列表的过程中完成这种聚合。
a = [4, 1, 7, 3]计算总和
sum(a) 会将每个元素相加并返回总和。它的速度接近 C 语言实现,因此请优先使用它,而不要自行编写累加循环。
total = sum(a) # 15最小值和最大值
min(a) 和 max(a) 会返回最小值和最大值。它们只需遍历整个列表一次,时间复杂度为 O(n)。
lo, hi = min(a), max(a)比较两个数字
min 和 max 也接受单独的参数。max(x, y) 可以直接选出两个值中较大的一个,而无需先创建列表。
best = max(score, best)使用键进行聚合
传入一个键函数
longest = max(words, key=len)处理空列表
min 和 max 在空列表上会引发错误。请传入 default=,或先检查长度,以避免运行时错误。
hi = max(a, default=0)运行总和的思路
运行总和会在遍历数组时持续维护一个总和。它是前缀和以及许多计数技巧的基础。
run = 0
for x in a:
run += x记录当前最佳值
扫描数组时维护一个当前最佳值变量,就可以用一次遍历解决最大子数组类问题。
best = a[0]
for x in a:
best = max(best, x)构建前缀列表
将每个运行总和保存到列表中,就能得到前缀数组。之后可以通过减去两个元素来回答区间求和问题。
pre = [0]
for x in a:
pre.append(pre[-1] + x)accumulate 快捷用法
itertools.accumulate 会为您生成运行总和,因此构建前缀数组只需一行代码,而且可靠易用。
from itertools import accumulate
pre = list(accumulate(a))警惕关于溢出的误解
好消息是:Python 整数没有大小上限,因此很大的总和也不会溢出。真正的风险是代码运行缓慢,而不是算术结果错误。
huge = sum(range(10**6)) # fine快速检查
您需要找到列表中最长的单词。哪一种调用方式是正确的?
回顾:一次遍历的力量
现在您已经可以用一次遍历求和、查找极值并维护运行总和。这些聚合操作可以将许多数组问题转化为一个循环。✨
常见问题解答
「最小值、最大值、总和与累计总计」课时是免费的吗?
是的 — 「最小值、最大值、总和与累计总计」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Coding Interview Prep 课程的其余内容,请升级到 CoddyKit PRO。 Coding Interview Prep 课程共包含 4 节课。
「最小值、最大值、总和与累计总计」这节课中我会学到什么?
单次遍历聚合列表 你通过在浏览器中直接运行的动手代码来练习 Coding Interview Prep,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Coding Interview Prep 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Coding Interview Prep 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「最小值、最大值、总和与累计总计」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Coding Interview Prep 课中编写并运行代码吗?
能。每节 Coding Interview Prep 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 适用于 CP 的列表、索引与切片
- 使用推导式快速构建数组
- 最小值、最大值、总和与累计总计
- 找出索引,而不只是数值