使用映射分组与装桶
将字母异位词及相似项目分组
使用映射分组与装桶 是 CoddyKit 上的免费 Competitive Programming Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Competitive Programming Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Competitive Programming Academy 课程共包含 4 节课。
分组是一种模式
许多问题都要求您将具有某种共同特征的元素分组。将键映射到分组桶,就能通过一次简洁的遍历完成任务。🗂️
选择分组键
整个技巧的关键,是选择一个对同组元素都相同的键。只要这一步正确,后面的工作就很简单。
使用默认字典分桶
使用默认字典(列表),让每个新键都从一个空分组桶开始。您可以直接追加元素,无需检查键是否存在。
from collections import defaultdict
buckets = defaultdict(list)核心循环
对于每个元素,计算它的键,并将元素append到该键对应的分组桶中。每个元素只需一行代码,就能完成全部分组。
for word in words:
buckets[key_of(word)].append(word)将字母异位词分组
字母异位词拥有相同的排序后字母,因此排序后的字符串是完美的分组键。只需排序一次,再按照它分桶。
k = ''.join(sorted(word))
buckets[k].append(word)用计数元组作为键
当排序速度较慢时,也可以使用字母计数构成的元组作为键。元组是可哈希的,因此可以自然地放入字典。
k = tuple(Counter(word)[c] for c in 'abcdefghijklmnopqrstuvwxyz')按属性分桶
只需改变键,就可以按照余数、奇偶性或长度对数字分组。这个模式在不同问题中完全相同。
for n in nums:
buckets[n % 3].append(n)分桶排序的思路
当值的范围较小时,将每个值放入按索引定位的分组桶中,再按顺序读取它们。这是一种近似线性的排序方法。
for x in nums:
bucket[x].append(x)收集结果
完成分桶后,答案通常就是字典的values。当评测程序需要分组本身时,请将它们转换为列表。
result = list(buckets.values())统计每组数量
如果只需要每组的大小,可以将元素分桶到计数器中,或在最后累加各组长度。请根据题目真正要求的内容进行选择。
sizes = {k: len(v) for k, v in buckets.items()}映射为何更优
使用映射进行分组的复杂度是 O(n),而不是比较每一对元素。哈希键会替您完成匹配工作。
快速检查
您希望将单词分组,使字母异位词落入同一个分组桶。
回顾
通过在一次 O(n) 遍历中,将每个元素的键映射到默认字典的分组桶中来完成分组。选择正确的键,分组问题就会迎刃而解。🚀
用 AI 导师学习 Python — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 30
- 课程
- 120
常见问题解答
「使用映射分组与装桶」课时是免费的吗?
是的 — 「使用映射分组与装桶」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Competitive Programming Academy 课程的其余内容,请升级到 CoddyKit PRO。 Competitive Programming Academy 课程共包含 4 节课。
「使用映射分组与装桶」这节课中我会学到什么?
将字母异位词及相似项目分组 你通过在浏览器中直接运行的动手代码来练习 Competitive Programming Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Competitive Programming Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Competitive Programming Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「使用映射分组与装桶」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Competitive Programming Academy 课中编写并运行代码吗?
能。每节 Competitive Programming Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。