Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Petua untuk menyahsulit persimpangan tatasusunan Golang

Petua untuk menyahsulit persimpangan tatasusunan Golang

王林
王林asal
2024-04-03 17:39:011150semak imbas

Dalam bahasa Go, kaedah untuk mencari persilangan tatasusunan ialah: gunakan fungsi terbina dalam Intersect, yang sesuai untuk tatasusunan yang diisih. Gunakan peta, sesuai untuk tatasusunan besar atau tatasusunan dengan beberapa elemen. Pengisihan tersuai dan carian binari untuk tatasusunan yang sangat besar. Kaedah yang hendak dipilih bergantung pada saiz tatasusunan dan pengedaran unsur.

解密 Golang 数组求交集的技巧

Nyahsulit kemahiran mencari persilangan tatasusunan dalam bahasa Go

Dalam bahasa Go, tatasusunan ialah koleksi tersusun yang menyimpan unsur jenis yang sama. Melakukan operasi persilangan pada tatasusunan boleh mendapatkan elemen yang wujud serentak dalam dua atau lebih tatasusunan. Berikut memperkenalkan beberapa teknik praktikal untuk mencari persimpangan dalam senario yang berbeza.

Fungsi terbina dalam BersilangIntersect

Go 语言提供了 sort 包中的 Intersect 函数,可直接求取两个已排序数组的交集。该函数接收两个已排序数组作为参数,并返回一个包含交集元素的新数组。

package main

import (
    "fmt"
    "sort"
)

func main() {
    arr1 := []int{1, 3, 5, 7, 9}
    arr2 := []int{2, 4, 6, 8, 9}

    sort.Ints(arr1)
    sort.Ints(arr2)

    res := sort.Intersect(arr1, arr2)
    fmt.Println(res) // []9
}

对于较小的数组,Intersect 函数是高效且简洁的解决方案。

使用 map

对于大型或元素不多的数组,使用 map 进行求交集也是一种有效的方法。通过将一个数组作为 map 的键,可以快速检查另一个数组中的元素是否也在 map

Bahasa Go menyediakan fungsi Sintersect dalam pakej sort, yang boleh mendapatkan secara langsung dua tatasusunan yang disusun persimpangan. Fungsi ini menerima dua tatasusunan diisih sebagai argumen dan mengembalikan tatasusunan baharu yang mengandungi elemen persilangan.

package main

import "fmt"

func main() {
    arr1 := []int{1, 3, 5, 7, 9}
    arr2 := []int{2, 4, 6, 8, 9}

    m := make(map[int]bool)
    for _, v := range arr1 {
        m[v] = true
    }

    var res []int
    for _, v := range arr2 {
        if m[v] {
            res = append(res, v)
        }
    }

    fmt.Println(res) // []9
}
Untuk tatasusunan yang lebih kecil, fungsi Intersect ialah penyelesaian yang cekap dan ringkas.

Gunakan peta

🎜Untuk besar atau tatasusunan dengan sedikit elemen, menggunakan peta untuk persimpangan juga merupakan kaedah yang berkesan. Dengan menggunakan tatasusunan sebagai kunci dalam peta, anda boleh menyemak dengan cepat sama ada elemen dalam tatasusunan lain turut berada dalam peta. 🎜
package main

import (
    "fmt"
    "sort"
)

func main() {
    arr1 := []int{1, 3, 5, 7, 9, 11, 13, 15}
    arr2 := []int{2, 4, 6, 8, 9, 10, 12, 14, 16}

    sort.Ints(arr1)
    sort.Ints(arr2)

    res := intersection(arr1, arr2)
    fmt.Println(res) // []9
}

func intersection(a, b []int) []int {
    var res []int
    for _, v := range a {
        idx := sort.SearchInts(b, v)
        if idx >= 0 && b[idx] == v {
            res = append(res, v)
        }
    }
    return res
}
🎜🎜Isih tersuai dan carian binari🎜🎜🎜Untuk tatasusunan yang sangat besar, menggunakan isihan tersuai dan algoritma carian binari untuk persilangan boleh mencapai prestasi yang lebih baik. Mula-mula susun kedua-dua tatasusunan, kemudian lelaran melalui salah satu tatasusunan dan lakukan carian binari pada yang lain untuk mencari elemen yang sepadan. 🎜rrreee🎜Pilih teknik persilangan yang paling sesuai berdasarkan saiz tatasusunan dan pengedaran elemen untuk mengoptimumkan prestasi kod. 🎜

Atas ialah kandungan terperinci Petua untuk menyahsulit persimpangan tatasusunan Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn