天天看點

算法篇:利用map求數組交集

算法:

求數組的交集,利用map的key,value特性會比較簡單,步驟如下:

1.先周遊數組1,然後将數組存到map1中
2.周遊數組2,将數組存入map2中,存的過程中需要判斷是否存在與map1中,
根據題目要求做去重處理或者不去重處理。
3.将滿足條件的元素放到新的數組裡面。
(備注:如果是多個數組的話,可以兩兩求交集,然後依次遞減,直到數組個數為1.)           

複制

題目1:

https://leetcode-cn.com/problems/intersection-of-two-arrays/

算法篇:利用map求數組交集

代碼實作:

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
}           

複制

執行結果:

算法篇:利用map求數組交集

題目2:

https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/

算法篇:利用map求數組交集

代碼實作:

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 
}           

複制

執行結果:

算法篇:利用map求數組交集