返回

踏上算法征途,从 LeetCode 349 开始

Android

算法的迷人世界

踏入算法的世界,犹如开启了一段探索未知的奇妙旅程。算法,作为计算机科学的核心,无处不在,从我们日常使用的搜索引擎到复杂的机器学习模型,算法都在幕后默默地发挥着不可或缺的作用。

算法的学习是一条漫长而艰辛的道路,需要的不止是天分,更是持之以恒的努力和对解决问题的执着。LeetCode,作为程序员算法练习的知名平台,提供了丰富的算法题库,从易到难,涵盖各个算法领域。而 349. 两个数组的交集,正是踏上算法征途的绝佳起点。

349. 两个数组的交集

题目给定两个数组 nums1 和 nums2,返回这两个数组的交集。每个元素只能出现在结果中一次。

解决步骤

  1. 排序数组: 首先,对两个数组进行排序。排序后,相同元素会相邻排列。
  2. 双指针遍历: 使用两个指针,分别指向两个排序后的数组。比较指针指向的元素,如果相等,则记录为交集元素,并同时移动两个指针。如果不相等,则移动指向较小元素的指针。
  3. 记录交集: 在遍历过程中,将相等的元素记录到一个新的数组中,即为两个数组的交集。

示例代码

def intersection(nums1, nums2):
  """
  :type nums1: List[int]
  :type nums2: List[int]
  :rtype: List[int]
  """
  # 排序数组
  nums1.sort()
  nums2.sort()

  # 初始化双指针
  p1 = 0
  p2 = 0
  # 记录交集
  intersection = []

  while p1 < len(nums1) and p2 < len(nums2):
    # 如果相等,则记录并移动指针
    if nums1[p1] == nums2[p2]:
      intersection.append(nums1[p1])
      p1 += 1
      p2 += 1
    # 如果 nums1 指向的元素较小,则移动 nums1 指针
    elif nums1[p1] < nums2[p2]:
      p1 += 1
    # 否则移动 nums2 指针
    else:
      p2 += 1

  return intersection

独到见解

此题看似简单,但蕴含着重要的算法思想。双指针技巧是一种高效的算法模式,适用于解决有序数组中的元素比较问题。同时,排序数组也是许多算法中的第一步,能够简化后续的比较和操作。

踏上征途

解决 LeetCode 349 只是算法征途的起点。算法的学习是一个不断积累和精进的过程。踏上算法之路,坚持不懈,终将收获满载而归的喜悦。LeetCode 上还有海量的算法题目,等待着你去征服。带上这股热情,开启你的算法探索之旅吧!