簡單
給定兩個數組,編寫一個函數來計算它們的交集。算法
示例1:數組
輸入: nums1 = [1,2,2,1], nums2 = [2,2] 輸出: [2,2]
示例2:app
輸入: nums1 = [4,9,5], nums2 = [9,4,9,8,4] 輸出: [4,9]
說明:函數
輸出結果中每一個元素出現的次數,應與元素在兩個數組中出現的次數一致。 咱們能夠不考慮輸出結果的順序。優化
進階:3d
若是給定的數組已經排好序呢?你將如何優化你的算法? 若是 nums1 的大小比 nums2 小不少,哪一種方法更優? 若是 nums2 的元素存儲在磁盤上,磁盤內存是有限的,而且你不能一次加載全部的元素到內存中,你該怎麼辦?code
對於hash
與數組
的考察。blog
求兩個數組並集,而且每一個元素出現次數應與元素在兩個數組中出現的次數一致,因此想到用map存儲元素與其出現的次數。 對於示例1:內存
首先迭代num1,獲取map1:hash
元素 : 出現次數 1 2 2 2
再迭代num2,判斷map1中是否存在,出現次數大於0。若是肯定,則將此元素加入到結果res數組中,並將map1中相應的元素出現次數-1。
最終將結果返回,示例2以此類推。
func intersect(nums1 []int, nums2 []int) []int { res := make([]int, 0) map1 := map[int]int{} for _, v := range nums1 { map1[v] = 1 } for _, v := range nums2 { if map1[v] > 0 { res = append(res, v) map1[v] -= 1 } } return res }