【题目描述】
给定两个数组,编写一个函数来计算它们的交集。
【示例1】
输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2,2]
【示例2】
输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [4,9]
【说明】
1、输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
2、我们可以不考虑输出结果的顺序。
【解1】
1、时间复杂度O(N^2)
2、空间复杂度O(n)
3、基本思路:
- 遍历一个数组,把两个共同的元素添加到新建的数组中,遍历完返回数组!
func intersect(_ nums1: [Int], _ nums2: [Int]) -> [Int] {
var result = [Int]()
var tmpNum1 = nums1
for num in nums2 {
if nums1.contains(num) {
if let index = tmpNum1.index(of: num) {
tmpNum1.remove(at: index)
result.append(num)
}
if tmpNum1.count <= 0 {
break
}
}
}
return result
}
【解2】
1、时间复杂度O(n)
2、空间复杂度O(n)
3、基本思路:
- 使用map[数字为key,数字个数为value]记录数字和数字个数
- 遍历数组2,map[num]的值大于0的就是两个数组共有的数字,然后map[num]-=1
- 返回添加数字的数组
func intersect(_ nums1: [Int], _ nums2: [Int]) -> [Int] {
var result = [Int]()
var tmp = [Int:Int]()
for num in nums1 {
var t = tmp[num] ?? 0
t+=1
tmp.updateValue(t, forKey: num)
}
for n in nums2 {
let tt = tmp[n] ?? 0
if tt > 0 {
result.append(n)
tmp[n]!-=1
}
}
return result
}
网友评论