Bagaimana untuk Cekap Menentukan sama ada Satu Slice Integer ialah Subset Satu Lagi dalam Go?

Linda Hamilton
Lepaskan: 2024-10-26 17:12:30
asal
298 orang telah melayarinya

How to Efficiently Determine if One Integer Slice is a Subset of Another in Go?

Semak Subset dengan Kepingan Integer dalam Go

Menentukan sama ada satu keping ialah subset yang lain dengan cekap ialah masalah biasa dalam pengaturcaraan. Tanpa pendekatan yang betul, lelaran pada setiap elemen kepingan untuk perbandingan boleh memakan masa.

Penyelesaian Optimum: Pendekatan Berasaskan Peta

Penyelesaian yang cekap untuk masalah ini menggunakan struktur data peta . Begini cara ia berfungsi:

<code class="go">package main

import "fmt"

func subset(first, second []int) bool {
    set := make(map[int]int)
    for _, value := range second {
        set[value] += 1
    }

    for _, value := range first {
        if count, found := set[value]; !found {
            return false
        } else if count < 1 {
            return false
        } else {
            set[value] = count - 1
        }
    }

    return true
}

func main() {
    fmt.Println(subset([]int{1, 2, 3}, []int{1, 2, 3, 4})) // true
    fmt.Println(subset([]int{1, 2, 2}, []int{1, 2, 3, 4})) // false
}</code>
Salin selepas log masuk

Dalam pendekatan ini:

  1. Kami mencipta peta (set) untuk menyimpan elemen kepingan kedua bersama-sama dengan kiraan mereka.
  2. Kami mengulangi bahagian pertama dan menyemak sama ada setiap elemen wujud dalam peta. Jika elemen tidak ditemui, kepingan itu bukan subset.
  3. Jika elemen ditemui, kami mengurangkan kiraan dalam peta. Jika kiraan menjadi sifar, kami tahu kami telah menemui semua kejadian elemen itu.
  4. Jika semua semakan lulus, kami kembali benar, menunjukkan bahawa kepingan pertama ialah subset daripada yang kedua.

Mengendalikan Nilai Pendua

Penyelesaian di atas juga mengendalikan nilai pendua dengan berkesan. Contohnya, {1, 2, 2} bukan subset {1, 2, 3, 4} kerana kepingan kedua mengandungi hanya satu 2. Jejak kod dikira dalam peta, memastikan bahawa kepingan pertama tiada lagi pendua elemen daripada kepingan kedua.

Atas ialah kandungan terperinci Bagaimana untuk Cekap Menentukan sama ada Satu Slice Integer ialah Subset Satu Lagi dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!