334 字
2 分钟
LeetCode-349.两个数组的交集
哈希表
给定两个数组
nums1和nums2,返回 它们的 交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]解释:[4,9] 也是可通过的
1.自己的解法(在242.有效的字母异位词的基础上修改)
func intersection(nums1 []int, nums2 []int) []int { record1 := make(map[int]int) for _, i := range nums1{ record1[i]++ }
record2 := make(map[int]int) for _, i := range nums2{ record2[i]++ }
output := []int{} for i := range record1{ if record2[i] > 0{ output = append(output, i) } }
return output}2.使用字典和集合(代码随想录)
func intersection(nums1 []int, nums2 []int) []int { set:=make(map[int]struct{},0) // 用map模拟set res:=make([]int,0) for _,v:=range nums1{ if _,ok:=set[v];!ok{ set[v]=struct{}{} } } for _,v:=range nums2{ //如果存在于上一个数组中,则加入结果集,并清空该set值 if _,ok:=set[v];ok{ res=append(res,v) delete(set, v) } } return res}3.使用数组
和我的方法差不多,但感觉更精准,符合取交集这个要求
func intersection(nums1 []int, nums2 []int) []int { count1 := make([]int, 1001, 1001) count2 := make([]int, 1001, 1001) res := make([]int, 0) for _, v := range nums1 { count1[v] = 1 } for _, v := range nums2 { count2[v] = 1 } for i := 0; i <= 1000; i++ { if count1[i] + count2[i] == 2 { res = append(res, i) } } return res} LeetCode-349.两个数组的交集
https://sheep44044.github.io/posts/算法/哈希/leetcode-349两个数组的交集/