
本文介绍一种时间复杂度为 O(N)、空间复杂度为 O(1) 的算法,用于在升序排列的整数数组中识别所有出现次数大于一次的元素,并按首次重复出现的顺序输出(每个重复元素仅输出一次)。
本文介绍一种时间复杂度为 o(n)、空间复杂度为 o(1) 的算法,用于在**升序排列的整数数组**中识别所有出现次数大于一次的元素,并按首次重复出现的顺序输出(每个重复元素仅输出一次)。
在已排序数组中查找重复元素,无需哈希表或额外存储——充分利用“相同元素必然连续”的特性,可实现单次遍历高效求解。核心思路是:使用一个指针 i 从左到右扫描,每当发现 arr[i] == arr[i+1],即确认该值至少重复一次;接着跳过所有连续相等的元素,将 arr[i] 记录为结果,并将指针直接移至下一个不同值的起始位置。
以下是 Python 实现(兼容题目输入格式):
n = int(input().strip()) arr = list(map(int, input().split())) if n <p>✅ <strong>关键说明与注意事项:</strong> </p>
- 时间效率:仅需一次线性扫描,最坏情况访问每个元素常数次,整体为 O(N);
-
去重逻辑:每个重复值只输出一次(如
[4,4,4]仅输出4),符合题目样例要求; -
边界处理:当
n 时不可能有重复,直接输出 <code>-1; -
避免越界:循环中始终检查
i ,确保 <code>arr[i+1]合法; - 稳定性:输出顺序与重复值首次出现位置一致(即升序排列下的自然顺序),无需额外排序。
该方法简洁、健壮且完全适配大规模输入(N ≤ 10⁵),是处理已排序数组重复检测的标准最优解。










