CodeSignal firstDuplicate(a)算法题:查找首个最小索引重复数
代码问题分析与修复方案
你的代码存在两处核心逻辑错误:
- 条件分支逻辑完全颠倒:当前你写的是「如果元素已经在seen集合中(即已经出现过一次),才执行添加操作」,完全不符合需求逻辑
- 没有命中结果时的提前返回逻辑:哪怕检测到重复元素,你的代码也不会返回该元素,而是继续遍历,最终永远返回-1
正确的实现逻辑如下:
遍历数组时,先判断当前元素是否已经被记录过:
- 如果已经存在于已访问集合,说明这是该元素第二次出现,因为我们是按顺序遍历的,所以第一个命中该条件的元素就是符合要求的答案,直接返回即可
- 如果不存在于已访问集合,就把该元素加入集合,继续遍历
- 遍历完成都没有命中重复,返回-1
修复后的代码:
def firstDuplicate(a): seen = set() for num in a: if num in seen: return num seen.add(num) return -1
内容的提问来源于stack exchange,提问作者peteripp
相关产品推荐
相关产品推荐

