golang_算法: leetcode_数组06-两个数组的交集 II

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 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]

你可能感兴趣的:(algorithm,#)