给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2,2]
示例 2:
输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [4,9]
说明:
输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
我们可以不考虑输出结果的顺序。
方式一
func Intersect(nums1 []int, nums2 []int) []int {
var map1 map[int][]int
var map2 map[int][]int
map1 = map[int][]int{}
map2 = map[int][]int{}
for _, value := range nums1 {
map1[value] = append(map1[value], value)
}
for _, value := range nums2 {
map2[value] = append(map2[value], value)
}
var sli = []int{}
for k, v := range map1 {
value, ok := map2[k]
if !ok {
continue
}
sliTemp := []int{}
if len(v) >= len(value) {
sliTemp = value
} else {
sliTemp = v
}
sli = append(sli, sliTemp...)
}
return sli
}
方式二
func IntersectEx(nums1 []int, nums2 []int) []int {
var map1 map[int]int
map1 = map[int]int{}
for _, value := range nums1 {
map1[value]++
}
var sli = []int{}
for _, value := range nums2 {
if len(map1) <= 0 {
break
}
count, ok := map1[value]
if !ok {
continue
}
if count <= 0 {
delete(map1, value)
continue
}
map1[value]--
sli = append(sli, value)
}
return sli
}
两种方式其实基本,都是求出来个数然后根据个数查找来插入