Heim > Backend-Entwicklung > Golang > „Zwei-Summen-Problem' auf LeetCode

„Zwei-Summen-Problem' auf LeetCode

Barbara Streisand
Freigeben: 2024-11-16 15:30:03
Original
226 Leute haben es durchsucht

Two Sum Problem’ on LeetCode

Problembeschreibung
Geben Sie bei einem gegebenen Array aus ganzen Zahlen und einem ganzzahligen Ziel die Indizes der beiden Zahlen zurück, die sich zum Ziel addieren.

Go-Funktionssignatur:
func twoSum(nums []int, target int) []int
Beispiel 1:
Eingabe: Nums = [2,7,11,15], Ziel = 9
Ausgabe: [0,1]
Erläuterung: Da nums[0] nums[1] == 9 ist, geben wir [0, 1] zurück.
Beispiel 2:

Eingabe: nums = [3,2,4], Ziel = 6
Ausgabe: [1,2]
Beispiel 3:

nput: nums = [3,3], target = 6
Ausgabe: [0,1]
Lösung 1: Brute-Force-Ansatz

Lösung 1: Brute-Force-Ansatz (verschachtelte Schleifen)
Bei diesem Ansatz überprüfen Sie jedes Elementpaar, um zu sehen, ob es in der Summe das Ziel ergibt. Dies beinhaltet das Durchlaufen des Arrays mit zwei verschachtelten Schleifen.

Code

func twoSum(nums []int, target int) []int {
    for i := 0; i < len(nums); i++ {
        for j := i + 1; j < len(nums); j++ {
            if nums[i] + nums[j] == target {
                return []int{i, j}
            }
        }
    }
    return nil
}
Nach dem Login kopieren

Komplexitätsanalyse

Lösung 2: Hash-Tabelle mit zwei Durchgängen
Diese Lösung verbessert den Brute-Force-Ansatz, indem sie eine Hash-Map verwendet, um den Wert und den Index jedes Elements im ersten Durchgang zu speichern. Im zweiten Durchgang prüfen Sie, ob das Komplement (d. h. Ziel – Zahl) in der Hash-Map vorhanden ist.

Code

func twoSum(nums []int, target int) []int {
    numMap := make(map[int]int)
    // First pass: populate the map with each element's index
    for i, num := range nums {
        numMap[num] = i
    }
    // Second pass: check for the complement
    for i, num := range nums {
        if j, ok := numMap[target - num]; ok && i != j {
            return []int{i, j}
        }
    }
    return nil
}
Nach dem Login kopieren

Lösung 3: One-Pass-Hash-Tabelle (optimale Lösung)

  • Dieser Ansatz kombiniert sowohl das Einfügen als auch das Suchen in einem einzigen Durchgang. Während Sie das Array durchlaufen, geschieht Folgendes:

  • Überprüfen Sie, ob das Komplement (d. h. Ziel – Zahl) in der Hash-Map vorhanden ist.

  • Wenn das Komplement gefunden wird, geben Sie die Indizes zurück.

  • Wenn nicht, fügen Sie das aktuelle Element und seinen Index zur Hash-Map für zukünftige Suchvorgänge hinzu.
    Code

func twoSum(nums []int, target int) []int {
    numMap := make(map[int]int)
    for i, num := range nums {
        if j, ok := numMap[target - num]; ok {
            return []int{j, i}
        }
        numMap[num] = i
    }
    return nil
}
Nach dem Login kopieren

Komplexitätsanalyse

  • Zeitkomplexität: ?(?)

    • Daher ist nur ein Durchlauf durch das Array erforderlich Ansatz linear in der Zeitkomplexität.
  • Raumkomplexität:o(n)

    • Die Hash-Map speichert jedes Element und seinen Index.

Vor- und Nachteile
Vorteile: Der effizienteste Ansatz für Zeitkomplexität, mit einer sauberen und kompakten Implementierung.
Nachteile: Keine, da die optimale zeitliche und räumliche Komplexität für dieses Problem erreicht wird.

Das obige ist der detaillierte Inhalt von„Zwei-Summen-Problem' auf LeetCode. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage