每日刷题---两个数组的交集 II

106 阅读1分钟

两个数组的交集 II

给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。

1、常规解法

func intersect(_ nums1: [Int], _ nums2: [Int]) -> [Int] {

        var repeatNum:[Int] = []

        if nums1.isEmpty || nums1.count == 0 || nums2.isEmpty || nums2.count == 0 {

            return repeatNum

        }

       let sortNums1 = nums1.sorted()

       let sortNums2 = nums2.sorted()

        var i = 0

        var j = 0

        while (i < sortNums1.count && j < sortNums2.count) {

            if sortNums1[i] < sortNums2[j] {

                i += 1

            } else if sortNums1[i] > sortNums2[j] {

                j += 1

            } else {

                repeatNum.append(sortNums1[i])

                i += 1

                j += 1

            }

        }

        return repeatNum

    }

2、利用map,字典解法

func intersect(_ nums1: [Int], _ nums2: [Int]) -> [Int] {

        var res = [Int]()

        var a = 0, b = 0

        var nums1 = nums1.sorted(), nums2 = nums2.sorted()

        while a < nums1.count && b < nums2.count {

            if nums1[a] == nums2[b] {

                res.append(nums1[a]) a += 1 b += 1

            } else if nums1[a] < nums2[b]{

                a += 1

            } else {

                b += 1

            } }

        return res

    }