package main

func intersect(nums1, nums2 []int) []int {
	count := func(nums []int) map[int]int {
		freqs := make(map[int]int)
		for _, x := range nums {
			freqs[x]++
		}
		return freqs
	}

	freqs1 := count(nums1)
	freqs2 := count(nums2)
	if len(freqs1) > len(freqs2) {
		freqs1, freqs2 = freqs2, freqs1
	}

	intersected := []int{}
	for x, count1 := range freqs1 {
		count2, found := freqs2[x]
		if !found {
			continue
		}

		for range min(count1, count2) {
			intersected = append(intersected, x)
		}
	}

	return intersected
}