返回

LeetCode:巧用JS,轻松找出两个数组的交集

前端

LeetCode是一家提供在线编程练习的网站,其中的题目涵盖了算法、数据结构、字符串、数组、哈希表等多种编程领域。如果您是一位编程爱好者或想要提高编程能力,那么LeetCode是一个非常适合您的平台。

今天的题目是「寻找两个数组的交集」。给定两个整型数组,要求找出这两个数组的交集,即找出同时存在于这两个数组中的元素。例如,对于数组[1, 2, 3, 4, 5]和[3, 4, 5, 6, 7],它们的交集是[3, 4, 5]。

这道题目的难点在于如何高效地找到两个数组的交集。一种朴素的解法是使用循环遍历两个数组,对于每个元素,在另一个数组中查找是否存在相同的元素。如果找到相同的元素,则将其加入到交集数组中。然而,这种解法的时间复杂度为O(n^2),对于大规模数组,这种解法会非常慢。

为了提高解题效率,我们可以使用集合来对数组进行去重。集合是一种数据结构,它可以自动去除重复元素。我们将两个数组分别转换成集合,然后遍历其中一个集合,对于每个元素,在另一个集合中查找是否存在相同的元素。如果找到相同的元素,则将其加入到交集数组中。这种解法的时间复杂度为O(n),对于大规模数组,这种解法会非常快。

以下是使用JavaScript实现的解题代码:

/*
 * 给定两个整型数组,找出这两个数组的交集,即找出同时存在于这两个数组中的元素。
 *
 * 例如,对于数组[1, 2, 3, 4, 5]和[3, 4, 5, 6, 7],它们的交集是[3, 4, 5]。
 *
 * @param {number[]} nums1 第一个数组
 * @param {number[]} nums2 第二个数组
 * @return {number[]} 两个数组的交集
 */
const intersection = (nums1, nums2) => {
  // 将两个数组分别转换成集合
  const set1 = new Set(nums1);
  const set2 = new Set(nums2);

  // 遍历其中一个集合
  const intersection = [];
  for (const num of set1) {
    // 如果在另一个集合中找到相同的元素,则将其加入到交集数组中
    if (set2.has(num)) {
      intersection.push(num);
    }
  }

  // 返回交集数组
  return intersection;
};

通过使用集合,我们大大提高了求解两个数组交集的效率。这种解法的时间复杂度为O(n),即使对于大规模数组,这种解法也会非常快。

希望本文对您有所帮助。如果您有任何问题或建议,请随时留言。