算法:
求數組的交集,利用map的key,value特性會比較簡單,步驟如下:
1.先周遊數組1,然後将數組存到map1中
2.周遊數組2,将數組存入map2中,存的過程中需要判斷是否存在與map1中,
根據題目要求做去重處理或者不去重處理。
3.将滿足條件的元素放到新的數組裡面。
(備注:如果是多個數組的話,可以兩兩求交集,然後依次遞減,直到數組個數為1.)
複制
題目1:
https://leetcode-cn.com/problems/intersection-of-two-arrays/
代碼實作:
func intersection(nums1 []int, nums2 []int) []int {
var numMap,numMap1 map[int]bool
var tar []int
numMap =make(map[int]bool)
numMap1 =make(map[int]bool)
for _,i:=range nums1 { // 周遊數組1排除重複的數字
if _,v:=numMap[i];!v {
numMap[i] = true
}
}
for _,j:=range nums2 {
if _,v:=numMap1[j];!v { // 周遊數組2排除重複的數字
if _,v1:=numMap[j];v1{ // 求數組1和數組2的交集
numMap1[j] = true
tar = append(tar,j)
}
}
}
return tar
}
複制
執行結果:
題目2:
https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/
代碼實作:
func intersect(nums1 []int, nums2 []int) []int {
if len(nums1) == 0 || len(nums2) == 0 {
return nil
}
var tar []int
nMap := make(map[int]int)
for _,n := range nums1 {
_, ok := nMap[n]
if !ok {
nMap[n] = 1
} else {
nMap[n]++
}
}
for _, m := range nums2 {
_, ok := nMap[m]
if ok && nMap[m]>0{
nMap[m]--
tar = append(tar,m)
}
}
return tar
}
複制
執行結果: