golang_算法: leetcode_数组06-两个数组的交集 II

这篇博客详细介绍了如何使用Go语言解决LeetCode中的数组问题,特别是两个数组的交集问题。通过利用HashMap的数据结构,实现了高效的解决方案,优化了查找和比较的效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package main

import "fmt"

//设计算法:
//运用map,统计nums1中值出现的次数-map[值]次数
//遍历nums2中的值,查看值是否在map中的出现

func intersect(nums1 []int, nums2 []int) []int {
	m := make(map[int]int)
	var arr []int
	for _,v := range nums1 {
		m[v]++
	}
	fmt.Println(m)

	for _,v := range nums2 {
		times, ok := m[v]  //v是nums2中的值,m[v]是map中的值.m[v]==times
		fmt.Printf("v=%d,times=%d\n",v,times)
		if ok && times > 0 {
			arr = append(arr, v)
			m[v]-- //所有出现的数字都+1,最后要减掉1
		}
	}
	return arr
}

func intersect2(nums1 []int, nums2 []int) []int {
	ints := make([]int, 0)
	l2 := len(nums2) // 这里注意l2是个定值,len(nums2)可能会因为元素的删除而变化
	for _, i2 := range nums1 {
		for j := 0; j < len(nums2); j++ {
			if i2 == nums2[j] && len(ints) < len(nums1) && len(ints) < l2 {
				ints = append(ints, i2)
				if j == len(nums2) -1 {
					nums2 = nums2[:j]
 				} else {
					nums2 = append(nums2[:j], nums2[j+1:]...)
				}
				j--
				break
			}
		}
	}
	return ints
}

func main() {
	a1 := []int{1,2,2,2,3}
	a2 := []int{2,2,3}
	fmt.Println(intersect(a1,a2))
}

Output:

map[1:1 2:3 3:1]
v=2,times=3
v=2,times=2
v=3,times=1
[2 2 3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值