使用集合判断成员关系与去重
在常数时间内测试元素是否存在
使用集合判断成员关系与去重 是 CoddyKit 上的免费 Coding Interview Prep 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Coding Interview Prep 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Coding Interview Prep 课程共包含 4 节课。
集合能带来什么
集合存储不重复且无序的元素,而它真正强大的地方在于,能够以大致恒定的时间回答“这里有这个吗?”。⚡
为什么不直接用列表
在列表中检查成员关系需要扫描每个元素,因此复杂度为 O(n)。集合会对值进行哈希,然后直接跳到对应的桶。
创建集合
您可以使用花括号或 set() 调用创建集合。空集合必须使用 set(),因为单独的花括号会创建字典。
seen = set()
vowels = {'a', 'e', 'i', 'o', 'u'}成员测试
使用 in 关键字询问某个值是否存在。对集合来说,这是快速查找,也是该数据结构值得使用的原因。
if x in seen:
print('already saw it')添加元素
使用 add 放入一个值。重复添加相同的值不会产生任何变化,因此集合会安静地为您保持所有元素的唯一性。
seen.add(x)即时去重
将任意可迭代对象传给 set(),重复项就会在一次遍历中消失。这是竞赛输入去重最简短的方法。
unique = set(nums)快速统计不同值
一个常见任务是“有多少个不同的值?”。将数据包装成集合,然后在一行代码中获取其长度。
distinct_count = len(set(nums))追踪已经见过的值
遍历时逐步构建集合,就能找出第一个重复项。如果某个值已经在集合中,您当场就发现了重复值。
for v in nums:
if v in seen:
return True
seen.add(v)免费使用集合运算
集合直接支持交集、并集和差集。比较两个组只需一个运算符,不再需要嵌套循环。
common = a & b
only_a = a - b删除与 discard
使用 discard 即使值不存在也能安全删除,而直接删除不存在的键会引发错误。请根据您的意图选择合适的方式。
seen.discard(x)仅限可哈希元素
集合需要包含可哈希的元素,因此不能放入列表,但可以放入元组。如果必须存储列表,请先将其转换为元组。
grid_seen = set()
grid_seen.add((row, col))快速检查
您需要知道一个列表中出现了多少个不同的数字。
回顾
集合提供 O(1) 的成员判断、即时去重,以及简单的交集或差集运算。每当您想问“我见过这个吗?”时,就应该考虑使用它。🚀
常见问题解答
「使用集合判断成员关系与去重」课时是免费的吗?
是的 — 「使用集合判断成员关系与去重」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Coding Interview Prep 课程的其余内容,请升级到 CoddyKit PRO。 Coding Interview Prep 课程共包含 4 节课。
「使用集合判断成员关系与去重」这节课中我会学到什么?
在常数时间内测试元素是否存在 你通过在浏览器中直接运行的动手代码来练习 Coding Interview Prep,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Coding Interview Prep 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Coding Interview Prep 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「使用集合判断成员关系与去重」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Coding Interview Prep 课中编写并运行代码吗?
能。每节 Coding Interview Prep 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 使用集合判断成员关系与去重
- 将字典用作查找表
- Counter 与 defaultdict 实战
- 使用映射分组与装桶