Heim >Backend-Entwicklung >Golang >Wie kann ich meine SPOJ-Lösung optimieren, um Zeitüberschreitungen zu vermeiden?
Schnelleres Eingabe-Scannen für SPOJ
Ihre SPOJ-Lösung läuft wegen der standardmäßigen Eingabe- und Ausgabefunktionen (fmt.Scan und fmt.Println) ab. sind relativ langsam. Um ein schnelleres Lesen von Eingaben zu erreichen, verwenden Sie bufio.Scanner, um Zeilen aus der Standardeingabe zu lesen.
Optimierung für Ganzzahlkonvertierung
Anstelle von bufio.Scanner.Text() Um die Textdarstellung zu erhalten und sie dann mit strconv.Atoi() in eine Ganzzahl umzuwandeln, verwenden Sie eine spezielle Konvertierungsfunktion, um die Zahl direkt aus den von zurückgegebenen Rohbytes zu extrahieren bufio.Scanner.Bytes(). Diese Methode vermeidet unnötige String-Konvertierungen und Speicherzuweisungen und verbessert die Leistung erheblich.
func toInt(buf []byte) (n int) { for _, v := range buf { n = n*10 + int(v-'0') } return }
Vollständig optimierte Lösung
Die folgende optimierte Lösung liest Eingaben viel schneller und erfüllt die SPOJ Zeitlimitanforderungen:
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) } func toInt(buf []byte) (n int) { for _, v := range buf { n = n*10 + int(v-'0') } return }
Zusätzlich Hinweise
for scanner.Scan() { if toInt(scanner.Bytes())%k == 0 { c++ } }
Das obige ist der detaillierte Inhalt vonWie kann ich meine SPOJ-Lösung optimieren, um Zeitüberschreitungen zu vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!