Python求两个数组交集的排序双指针解法

月亮慢半拍
月亮慢半拍
发布时间:2026-10-13 | 7人浏览过
原创

本文介绍使用Python计算两个数组交集的方法。通过先对两个数组进行排序,再利用双指针遍历比较元素大小,相等时记录结果并同步移动指针,不等时移动较小值所在数组的指针。该方法能确保输出元素出现次数与两数组中一致,且无需考虑输出顺序,代码简洁高效。

本文分享一种使用Python计算两个数组交集的具体实现方案,供读者参考学习。

一、题目描述

给定两个整数数组,请编写一个函数来计算它们的交集。

示例1:

输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2]

示例2:

输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出: [4,9]

注意事项:

  • 输出结果中每个元素出现的频次,必须与该元素在两个输入数组中出现的频次保持一致。
  • 输出结果的元素顺序不作要求,可以任意排列。

二、解题思路

核心策略是先对两个数组分别进行排序处理。随后使用双指针从数组头部开始遍历比较:当两个指针指向的值相等时,将该值加入结果集,并同时向后移动两个指针;若值不相等,则移动指向较小数值的那个数组的指针(因为数组已排序,移动较大值所在的指针只会使差值更大,无法匹配)。

具体实现代码如下:

nums1.sort()
nums2.sort()
result = []
i, j = 0, 0
while i<len(nums1) and j<len(nums2):
  if nums1[i]==nums2[j]:
    result.append(nums1[i])
    i += 1
    j += 1
  elif nums1[i]>nums2[j]:
    j += 1
  elif nums1[i]<nums2[j]:
    i += 1
return result

运行耗时52ms,性能优于93%的提交记录。

本地测试代码示例如下:

# -*- coding:utf-8 -*-
nums1 = [1,2,2,1]
nums2 = [2,2]
nums1.sort()
nums2.sort()
result = []
i, j = 0, 0
while i<len(nums1) and j<len(nums2):
  if nums1[i]==nums2[j]:
    result.append(nums1[i])
    i += 1
    j += 1
  elif nums1[i]>nums2[j]:
    j += 1
  elif nums1[i]<nums2[j]:
    i += 1
print(result)

执行输出结果:

[2, 2]

如需进一步了解Python相关知识,可参阅本站专题:《Python数组操作技巧总结》、《Python数据结构与算法教程》、《Python列表(list)操作技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》。

希望上述内容能对您的Python编程实践提供有益帮助。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表