如何用Python识别数组中不符合指定序列的异常元素索引?
问题需求
给定重复序列 sequence = [1, 1, 0],正常数组会全程重复该序列(例如 [1, 1, 0, 1, 1, 0, 1, 1, 0])。但部分数组中混入了个别异常元素(仅0或1),移除这些异常元素后数组会完全符合序列重复规律。需要编写Python代码找出所有异常元素的索引。
示例:
异常数组 [1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0] 中,索引6和16的元素是异常值,移除后数组符合序列重复规则。
此前尝试的方案存在缺陷:
- 将数组拆分为3元素块递归检查,效率极低
- 通过索引和已识别异常数计算预期值,但逐元素对比导致逻辑重叠,易出错
解决方案
思路
采用线性遍历的方式,维护一个指针跟踪当前需要匹配的序列位置:
- 遍历数组时,若当前元素与序列指针指向的元素匹配,则将指针后移(循环回到序列开头)
- 若不匹配,则记录当前索引为异常,不移动序列指针
该方法时间复杂度为O(n)(n为数组长度),效率高且逻辑清晰,不会出现重叠问题。
代码实现
def find_anomalous_indices(arr, sequence): seq_len = len(sequence) if seq_len == 0: return [] seq_ptr = 0 anomalies = [] for idx, num in enumerate(arr): if num == sequence[seq_ptr]: seq_ptr = (seq_ptr + 1) % seq_len else: anomalies.append(idx) return anomalies # 测试示例 test_array = [1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0] target_sequence = [1, 1, 0] print(find_anomalous_indices(test_array, target_sequence)) # 输出: [6, 16]
代码说明
seq_ptr:始终指向当前应该匹配的序列元素位置,匹配成功后循环推进- 遍历过程中,仅在元素匹配时推进序列指针,不匹配则直接标记当前索引为异常
- 空序列做特殊处理,直接返回空列表
内容的提问来源于stack exchange,提问作者callum
相关产品推荐
相关产品推荐

