如何找出数组中非连续出现的重复数字并输出?
找出数组中非连续出现的重复数字
要解决这个问题,核心是区分连续重复和非连续重复的元素:连续重复指元素相邻出现(比如示例中的2、3),非连续重复指元素在数组中至少出现两次,且存在两次出现的位置不相邻(比如示例中的5)。
解决思路
- 先记录每个元素在数组中所有的出现位置;
- 筛选出出现次数≥2的元素;
- 对这些元素,检查它们的位置列表中是否存在两个位置的差值大于1——如果存在,说明该元素有非连续的重复出现。
Python 代码实现
def find_non_consecutive_duplicates(arr): # 存储每个元素对应的所有索引位置 index_records = {} for idx, num in enumerate(arr): if num not in index_records: index_records[num] = [] index_records[num].append(idx) non_consecutive = [] for num, indices in index_records.items(): # 只处理出现至少两次的元素 if len(indices) < 2: continue # 检查是否存在非连续的位置 for i in range(1, len(indices)): if indices[i] - indices[i-1] > 1: non_consecutive.append(num) break # 找到一组非连续即可停止检查当前元素 return non_consecutive # 测试示例输入 sample_arr = [5,2,2,3,3,5] print(find_non_consecutive_duplicates(sample_arr)) # 输出: [5]
代码解释
- 用
enumerate遍历数组,把每个元素的索引存入字典,键是元素值,值是索引列表; - 遍历字典时,跳过出现次数不足两次的元素;
- 对每个候选元素,遍历它的索引列表,只要发现两个相邻索引的差大于1,就说明该元素存在非连续重复,加入结果列表。
边界情况处理
- 如果数组长度小于2,直接返回空列表(不可能有重复元素);
- 如果元素多次出现但全是连续的(比如
[2,2,2]),不会被计入结果; - 如果多个元素符合条件(比如
[1,3,1,3]),会返回所有符合条件的元素。
内容的提问来源于stack exchange,提问作者SKCH
相关产品推荐
相关产品推荐

