两个数组的交集
题目
给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序 。
示例 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] 也是可通过的
思路
这道题用暴力的解法时间复杂度是O(n^2),那来看看使用哈希法进一步优化。
解法
暴力解法带去重:
func intersection(nums1 []int, nums2 []int) []int {
res := make([]int, 0)
for _, v1 := range nums1 {
for _, v2 := range nums2 {
if v1 == v2 {
res = append(res, v1)
break
}
}
}
return removeDuplicate(res)
}
func removeDuplicate(nums []int) []int {
res := make([]int, 0)
m := make(map[int]bool)
for _, v := range nums {
if _, ok := m[v]; !ok {
m[v] = true
res = append(res, v)
}
}
return res
}
使用哈希法:
func intersection(nums1 []int, nums2 []int) []int {
res := make([]int, 0)
m := make(map[int]bool)
for _, v := range nums1 {
m[v] = true
}
for _, v := range nums2 {
if _, ok := m[v]; ok {
res = append(res, v)
delete(m, v)
}
}
return res
}