You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3中intersection()函数报错,求解数组首重复元素问题

问题分析与代码修正

首先,你的代码存在几个关键问题,导致运行报错且逻辑不符合题目要求:

1. 集合与列表的混淆

你错误地将set1和set2定义为列表(比如set1=[a]),但变量名却用了set相关的命名,这不仅混淆了数据类型,而且这种赋值逻辑和题目要找重复数字的需求完全无关。

2. 不存在的全局intersection函数

Python中没有全局的intersection函数,集合的交集操作需要通过集合对象的intersection()方法或者&运算符实现,而且你的代码里甚至没有定义b变量,这必然会导致报错。

3. 思路偏离题目要求

你分割数组的逻辑完全无法追踪每个数字的出现位置,题目需要的是找到第二次出现位置索引最小的重复数字,而不是分割数组找交集。


正确解法思路

其实题目要求可以简化为:遍历数组时,第一个遇到的重复数字就是答案——因为它的第二次出现位置是所有重复数字里最早的,后续的重复数字的第二次出现位置肯定更晚。具体步骤:

  • 用一个集合记录已经遍历过的数字
  • 遍历数组中的每个元素:
    • 如果当前元素已经在集合中,直接返回它(这就是我们要找的目标)
    • 如果不在,将其加入集合
  • 遍历结束后若没有找到重复数字,返回-1

修正后的代码

def firstDuplicate(a):
    seen = set()
    for num in a:
        if num in seen:
            return num
        seen.add(num)
    return -1

# 测试用例验证
print(firstDuplicate([2, 1, 3, 5, 3, 2]))  # 输出:3
print(firstDuplicate([2, 4, 3, 5, 1]))     # 输出:-1
print(firstDuplicate([2, 3, 3, 1, 5, 2]))  # 输出:3

复杂度分析

  • 时间复杂度:O(n),每个元素仅遍历一次,集合的查找和添加操作平均时间复杂度为O(1)
  • 空间复杂度:O(n),最坏情况下所有元素都不重复,集合需要存储全部元素

这个解法完全满足题目中数组长度≤10^5的性能要求,执行时间远低于4秒的限制。

内容的提问来源于stack exchange,提问作者Salwa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:50:36