Heim >Backend-Entwicklung >Golang >Wie kann ich das Scannen von Eingaben in Go optimieren, um Zeitüberschreitungen zu vermeiden?

Wie kann ich das Scannen von Eingaben in Go optimieren, um Zeitüberschreitungen zu vermeiden?

Barbara Streisand
Barbara StreisandOriginal
2024-12-17 17:04:10313Durchsuche

How Can I Optimize Input Scanning in Go to Avoid Timeouts?

Optimieren des Eingabescans für eine schnellere Ausführung

Um das Timeout-Problem bei einer SPOJ-Frage zu beheben, sind spezifische Optimierungen für ein schnelleres Eingabescannen erforderlich.

Verwendung von bufio.Scanner for Line Lesen

Anstatt fmt.Scan allein zu verwenden, nutzen Sie bufio.Scanner, um effizient Zeilen aus der Eingabe zu lesen.

Anpassen der Zahlenkonvertierung für mehr Geschwindigkeit

Da nur numerische Eingaben erwartet werden, kann ein benutzerdefinierter Zahlenkonverter implementiert werden, um Ganzzahlen direkt aus Rohbytes zu extrahieren. Dadurch wird die Leistung im Vergleich zur Verwendung von Scanner.Text erheblich verbessert, da unnötige Zeichenfolgenkonvertierung und Overhead vermieden werden.

Implementierung des benutzerdefinierten Zahlenkonverters

Die Funktion toInt dient zum Konvertieren von Rohbytes in Ganzzahlen effizient:

func toInt(buf []byte) (n int) {
    for _, v := range buf {
        n = n*10 + int(v-'0')
    }
    return
}

Diese Funktion nutzt die Eins-zu-Eins-Zuordnung von Ziffern zu UTF-8-codierten Bytes im Eingabe.

Verfeinerte Lösung

In Kombination dieser Optimierungen lautet die verbesserte Lösung wie folgt:

package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    var n, k, c int
    scanner := bufio.NewScanner(os.Stdin)

    scanner.Scan()
    fmt.Sscanf(scanner.Text(), "%d %d", &n, &k)

    for ;n > 0; n-- {
        scanner.Scan()
        if toInt(scanner.Bytes())%k == 0 {
            c++
        }
    }

    fmt.Println(c)
}

Vorteile der Optimierung

Diese optimierte Lösung verbessert die Geschwindigkeit des Eingabescans erheblich und stellt sicher, dass das Programm das Notwendige verarbeiten kann Eingaben innerhalb der vorgegebenen Frist. Der benutzerdefinierte Zahlenkonverter minimiert zusammen mit der Verwendung von bufio.Scanner den Laufzeitaufwand und erhöht die Programmeffizienz.

Das obige ist der detaillierte Inhalt vonWie kann ich das Scannen von Eingaben in Go optimieren, um Zeitüberschreitungen zu vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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