github.com/maikovskiys/l1tasks@v0.0.0-20230927052451-6436d7687dc9/develop/dev11/main.go (about)

     1  package main
     2  
     3  import "fmt"
     4  
     5  /*
     6  Реализовать пересечение двух неупорядоченных множеств.
     7  */
     8  func main() {
     9  	a := []int{23, 3, 1, 2}
    10  	b := []int{6, 2, 4, 23}
    11  	result := intersection(a, b)
    12  	fmt.Println(result)
    13  }
    14  func intersection(a, b []int) []int {
    15  	counter := make(map[int]int)
    16  	var result []int
    17  
    18  	for _, elem := range a {
    19  		if _, ok := counter[elem]; !ok {
    20  			counter[elem] = 1
    21  		} else {
    22  			counter[elem] += 1
    23  		}
    24  	}
    25  	for _, elem := range b {
    26  		if count, ok := counter[elem]; ok && count > 0 {
    27  			counter[elem] -= 1
    28  			result = append(result, elem)
    29  		}
    30  	}
    31  	return result
    32  }