简单
给定两个数组,编写一个函数来计算它们的交集。算法
示例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 }