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

如何找出数组中非连续出现的重复数字并输出?

找出数组中非连续出现的重复数字

要解决这个问题,核心是区分连续重复和非连续重复的元素:连续重复指元素相邻出现(比如示例中的2、3),非连续重复指元素在数组中至少出现两次,且存在两次出现的位置不相邻(比如示例中的5)。

解决思路

  1. 先记录每个元素在数组中所有的出现位置;
  2. 筛选出出现次数≥2的元素;
  3. 对这些元素,检查它们的位置列表中是否存在两个位置的差值大于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 19:35:16