广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >LeetCode 刷题 Swift 两个数组的交集
  • 1163
分享到

LeetCode 刷题 Swift 两个数组的交集

2024-04-02 19:04:59 1163人浏览 八月长安
摘要

目录题目方法一:两个集合思路及解法代码复杂度分析方法二:排序 + 双指针思路及解法代码复杂度分析题目 给定两个数组 nums1 和 nums2,返回 它们的交集 。输出结果中的每个元

题目

给定两个数组 nums1nums2,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。

示例 1:

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

输出: [2]

示例 2:

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

输出: [9,4]

解释: [4,9] 也是可通过的

方法一:两个集合

思路及解法

计算两个数组的交集,直观的方法是遍历数组 nums1,对于其中的每个元素,遍历数组 nums2 判断该元素是否在数组 nums2 中,如果存在,则将该元素添加到返回值。假设数组 nums1nums2 的长度分别是 m 和 n,则遍历数组 nums1 需要 O(m) 的时间,判断 nums1 中的每个元素是否在数组 nums2 中需要 O(n) 的时间,因此总时间复杂度是 O(mn)。

如果使用哈希集合存储元素,则可以在 O(1)的时间内判断一个元素是否在集合中,从而降低时间复杂度。

首先使用两个集合分别存储两个数组中的元素,然后遍历较小的集合,判断其中的每个元素是否在另一个集合中,如果元素也在另一个集合中,则将该元素添加到返回值。该方法的时间复杂度可以降低到 O(m+n)

代码

class Solution {
    func intersection(_ nums1: [Int], _ nums2: [Int]) -> [Int] {
        return set_intersection(Set(nums1), Set(nums2))
    }
    func set_intersection(_ set1: Set<Int>, _ set2: Set<Int>) -> [Int] {
        if set1.count > set2.count {
            return set_intersection(set2, set1)
        }
        var intersection: [Int] = []
        for num in set1 {
            if set2.contains(num) {
                intersection.append(num)
            }
        }
        return intersection
    }
}

复杂度分析

方法二:排序 + 双指针

思路及解法

如果两个数组是有序的,则可以使用双指针的方法得到两个数组的交集。

首先对两个数组进行排序,然后使用两个指针遍历两个数组。可以预见的是加入答案的数组的元素一定是递增的,为了保证加入元素的唯一性,我们需要额外记录变量 pre\textit{pre}pre 表示上一次加入答案数组的元素。

初始时,两个指针分别指向两个数组的头部。每次比较两个指针指向的两个数组中的数字,如果两个数字不相等,则将指向较小数字的指针右移一位,如果两个数字相等,且该数字不等于 pre\textit{pre}pre ,将该数字添加到答案并更新 pre\textit{pre}pre 变量,同时将两个指针都右移一位。当至少有一个指针超出数组范围时,遍历结束。

代码

class Solution {
    func intersection(_ nums1: [Int], _ nums2: [Int]) -> [Int] {
        let newNums1: [Int] = nums1.sorted()
        let newNums2: [Int] = nums2.sorted()
        let length1: Int = newNums1.count
        let length2: Int = newNums2.count
        var intersection: [Int] = []
        var index1 = 0
        var index2 = 0
        while index1 < length1 && index2 < length2 {
            let num1 = newNums1[index1]
            let num2 = newNums2[index2]
            if num1 == num2 {
                if intersection.isEmpty || num1 != intersection.last {
                    intersection.append(num1)
                }
                index1 += 1
                index2 += 1
            } else if num1 < num2 {
                index1 += 1
            } else {
                index2 += 1
            }
        }
        return intersection
    }
}

复杂度分析

以上就是LeetCode 刷题 Swift 两个数组的交集的详细内容,更多关于Swift 两个数组交集的资料请关注编程网其它相关文章!

--结束END--

本文标题: LeetCode 刷题 Swift 两个数组的交集

本文链接: https://www.lsjlt.com/news/168097.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • LeetCode 刷题 Swift 两个数组的交集
    目录题目方法一:两个集合思路及解法代码复杂度分析方法二:排序 + 双指针思路及解法代码复杂度分析题目 给定两个数组 nums1 和 nums2,返回 它们的交集 。输出结果中的每个元...
    99+
    2022-11-13
  • JavaScript实现两个数组的交集
    目录两个数组的交集 I两个数组的交集 II两个数组的交集 I 给定两个数组 ​​nums1​​​ 和 ​​nums2​​ ,返回 它...
    99+
    2022-11-13
  • es6如何求两个数组的交集
    这篇文章主要介绍“es6如何求两个数组的交集”,在日常操作中,相信很多人在es6如何求两个数组的交集问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”es6如何求两个数组的交集”...
    99+
    2022-10-19
  • 两个数组的交集-C语言/Java
    描述         给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序。(1 ...
    99+
    2023-09-01
    c语言 java 算法
  • php两个数组怎么求交集
    本教程操作环境:windows7系统、PHP8.1版、DELL G3电脑PHP提供了多个函数来比较两个数组求交集,下面主要介绍常用的三个函数:array_intersect()、array_intersect_assoc()和ar...
    99+
    2022-10-18
  • JavaScript怎么实现两个数组的交集
    这篇文章主要介绍“JavaScript怎么实现两个数组的交集”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript怎么实现两个数组的交集”文章能帮助大家解决问题。两个数组的交集 I给定两...
    99+
    2023-06-29
  • Python中怎么求两个数组的交集
    Python中怎么求两个数组的交集,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。题目:给定两个数组,编写一个函数来计算它们的交集。示例 1:输入: nums1&n...
    99+
    2023-06-02
  • php中两个数组求交集的函数是哪个
    本篇内容介绍了“php中两个数组求交集的函数是哪个”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!有8个交集函数:1、array_inters...
    99+
    2023-06-30
  • 力扣题目汇总(单调数列,两个数组的交集Ⅱ
    单调数列 1.题目描述 如果数组是单调递增或单调递减的,那么它是单调的。 如果对于所有 i <= j,A[i] <= A[j],那么数组 A 是单调递增的。 如果对于所有 i <= j,A[i]> = A[j...
    99+
    2023-01-31
    数列 数组 单调
  • PHP如何比较两个数组求交集
    本篇内容主要讲解“PHP如何比较两个数组求交集”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP如何比较两个数组求交集”吧!首先我们要知道PHP提供了多个函数来比较两个数组求交集,本文主要介绍...
    99+
    2023-06-20
  • JS怎么计算两个数组的交集、差集、并集、补集
    这篇文章给大家分享的是有关JS怎么计算两个数组的交集、差集、并集、补集的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。方法一:最普遍的做法使用 ES5 语法来实现虽然会麻烦些,但兼...
    99+
    2022-10-19
  • php 判断两个数组是否存在交集
    php判断两个数组是否存在交集的三种情况: 1.array_intersect() 比较两个数组的值,并返回交集: "red","b"=>"green","c"=>"blue","d"=>"yello...
    99+
    2023-09-07
    php 开发语言 python
  • php怎么删除两数组的交集
    删除步骤:1、利用array_intersect()获取两数组的交集,语法“array_intersect(原数组1,(原数组2)”,会返回一个交集数组;2、使用array_diff()分别将两个原数组和交集数组进行对比,获取差集,即删除交...
    99+
    2022-08-08
    php数组 php
  • C++实现LeetCode(两个有序数组的中位数)
    [LeetCode] 4. Median of Two Sorted Arrays 两个有序数组的中位数 There are two sorted arrays nums1...
    99+
    2022-11-12
  • Java C++题解leetcode消失的两个数字实例
    目录题目要求思路:数学推导JavaC++Rust总结题目要求 思路:数学推导 不重复的数组序列可以根据高斯公式计算所有元素的总和:用当前数组长度加上两个缺失的数字可以得到所有数字长...
    99+
    2022-11-13
  • C++如何实现LeetCode两个有序数组的中位数
    这篇文章主要讲解了“C++如何实现LeetCode两个有序数组的中位数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++如何实现LeetCode两个有序数组的中位数”吧![LeetCode...
    99+
    2023-06-20
  • java数组怎么交换两个元素的值
    要交换Java数组中两个元素的值,可以通过以下方式实现:1. 创建一个临时变量,将第一个元素的值赋给临时变量。2. 将第二个元素的值...
    99+
    2023-08-16
    java
  • python如何交换数组中的两个元素
    在Python中,可以使用以下两种方法交换数组中的两个元素:1. 使用临时变量交换元素:```pythonarr = [1, 2, ...
    99+
    2023-08-23
    python
  • LeetCode刷题攻略:用Java语言解决数组问题的技巧与实践
    在LeetCode刷题的过程中,数组问题是非常常见的。数组问题一般都是关于数组元素的增删改查或者一些数组的操作,如果处理不好,会导致时间复杂度高、空间复杂度高的情况。在本篇文章中,将介绍一些处理数组问题的技巧和实践,以及演示Java语言的...
    99+
    2023-11-13
    linux leetcode 数组
  • 使用Golang的channel交叉打印两个数组的操作
    Go的channel提供了强大的同步功能,那么如何使用channel交叉打印两个数组呢? 灰常简单,只需设置两个channel变量 数组1打印完一个值就用channel通知数组2,同...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作