Heim >Backend-Entwicklung >Golang >Wie kann ich das Scannen von Eingaben in Go optimieren, um Zeitüberschreitungen zu vermeiden?
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!