如何用Python的Set判断数组中各元素是否重复并输出指定结果
解决思路与实现方案
你的需求是遍历数组中的每个元素,若当前元素之前已经出现过则输出YES,否则输出NO(对应示例输出逻辑)。针对这个需求,这里提供两种高效的实现方式:
方法一:使用集合记录已遍历元素(最优解,时间复杂度O(n))
利用集合的O(1)查找特性,遍历数组时实时记录已经见过的元素,判断当前元素是否重复出现:
a = [int(v) for v in input().split()] seen = set() for num in a: if num in seen: print("YES") else: print("NO") seen.add(num)
运行示例输入1 2 3 2 3 4,会输出:
NO NO NO YES YES NO
完全符合你的示例要求。
方法二:统计元素总出现次数,结合遍历计数
先统计每个元素在数组中的总出现次数,再遍历数组记录每个元素的当前出现次数,当总次数>1且当前是第二次及以后出现时输出YES:
from collections import Counter a = [int(v) for v in input().split()] counts = Counter(a) current = {} for num in a: current[num] = current.get(num, 0) + 1 if counts[num] > 1 and current[num] > 1: print("YES") else: print("NO")
关于你原来思路的问题
你提到的Set确实无法统计元素出现次数,因为Set的特性是仅存储唯一元素。而a.count(a[i])的方式每次调用都会遍历整个数组,时间复杂度是O(n²),当数组规模较大时效率会很低,不推荐使用。
内容的提问来源于stack exchange,提问作者Codeer
相关产品推荐
相关产品推荐

