package main
import "fmt"
//设计算法:
//运用map,统计nums1中值出现的次数-map[值]次数
//遍历nums2中的值,查看值是否在map中的出现
func intersect(nums1 []int, nums2 []int) []int {
m := make(map[int]int)
var arr []int
for _,v := range nums1 {
m[v]++
}
fmt.Println(m)
for _,v := range nums2 {
times, ok := m[v] //v是nums2中的值,m[v]是map中的值.m[v]==times
fmt.Printf("v=%d,times=%d\n",v,times)
if ok && times > 0 {
arr = append(arr, v)
m[v]-- //所有出现的数字都+1,最后要减掉1
}
}
return arr
}
func intersect2(nums1 []int, nums2 []int) []int {
ints := make([]int, 0)
l2 := len(nums2) // 这里注意l2是个定值,len(nums2)可能会因为元素的删除而变化
for _, i2 := range nums1 {
for j := 0; j < len(nums2); j++ {
if i2 == nums2[j] && len(ints) < len(nums1) && len(ints) < l2 {
ints = append(ints, i2)
if j == len(nums2) -1 {
nums2 = nums2[:j]
} else {
nums2 = append(nums2[:j], nums2[j+1:]...)
}
j--
break
}
}
}
return ints
}
func main() {
a1 := []int{1,2,2,2,3}
a2 := []int{2,2,3}
fmt.Println(intersect(a1,a2))
}
Output:
map[1:1 2:3 3:1]
v=2,times=3
v=2,times=2
v=3,times=1
[2 2 3]