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

设计算法比较等长有序列表并统计共同元素数量(非集合实现)

用双指针法统计两个有序列表的共同元素数量

嘿,既然两个列表都是有序且长度相同的,咱们完全可以用双指针这种基础的数组遍历技巧来解决,不用依赖集合的内置方法,刚好能练手数据结构的基础逻辑!

核心思路

因为列表是有序的,我们可以用两个指针分别从两个列表的起始位置开始遍历,通过比较当前指针指向的元素来调整指针位置:

  • 如果两个元素相等,说明找到一个共同元素,计数加1,同时把两个指针都向后移动一位
  • 如果列表a的当前元素更小,就把a的指针向后移(因为a后面的元素更大,才有可能匹配b当前的元素)
  • 如果列表b的当前元素更小,就把b的指针向后移
    直到其中一个指针超出列表的长度,遍历就结束了。

代码实现(Python)

def count_common_elements(a, b):
    # 初始化两个指针,分别指向两个列表的起始位置
    i = j = 0
    count = 0
    # 只要两个指针都没超出列表长度,就继续遍历
    while i < len(a) and j < len(b):
        if a[i] == b[j]:
            count += 1
            i += 1
            j += 1
        elif a[i] < b[j]:
            i += 1
        else:
            j += 1
    return count

# 测试示例
a = [2, 9, 15, 27, 36, 40]
b = [9, 11, 15, 23, 36, 44]
print(count_common_elements(a, b))  # 输出:3

为什么这个方法高效?

这个算法的时间复杂度是O(n),其中n是列表的长度——因为每个指针最多只遍历列表一次,没有嵌套循环,比暴力遍历(O(n²))高效得多,而且完全基于数组的基础操作,非常适合理解有序列表的遍历逻辑。

内容的提问来源于stack exchange,提问作者MacGenius

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:01:58