package main
import (
"fmt"
"sort"
)
/*
数组求交集
*/
func main() {
arr := []int{1, 2, 4, 3, 5}
brr := []int{6, 7, 8, 4, 5}
//m := array_intersect(arr, brr)
//m := intersection(arr, brr)
m := intersect(arr, brr)
fmt.Println(m)
}
//方法1
func array_intersect(arr []int, brr []int) (n []int) {
for i := 0; i < len(arr); i++ {
for j := 0; j < len(brr); j++ {
if arr[i] == brr[j] {
n = append(n, arr[i])
}
}
}
return
}
//方法2
func intersection(nums1, nums2 []int) []int {
m := make(map[int]int, 0)
for _, v := range nums1 {
m[v] += 1
}
count := 0 //记录新数组长度
for _, v := range nums2 {
//获取map不存在的值为类型的默认值
//例 map[int]int m[v] v不存在返回 0
if m[v] > 0 {
m[v] = 0
nums1[count] = v
count++
}
}
return nums1[:count]
}
//方法3
func intersect(nums1 []int, nums2 []int) []int {
i, j, k := 0, 0, 0
sort.Ints(nums1)
sort.Ints(nums2)
for i < len(nums1) && j < len(nums2) {
if nums1[i] > nums2[j] {
j++
} else if nums1[i] < nums2[j] {
i++
} else {
nums1[k] = nums1[i]
i++
j++
k++
}
}
return nums1[:k]
}
go 数组求交集
最新推荐文章于 2024-04-19 21:54:52 发布