Maison >développement back-end >Golang >Comment puis-je optimiser ma solution SPOJ pour éviter les délais d'attente ?
Analyse d'entrée plus rapide pour SPOJ
Votre solution SPOJ expire car les fonctions d'entrée et de sortie par défaut (fmt.Scan et fmt.Println) sont relativement lents. Pour obtenir une lecture d'entrée plus rapide, utilisez bufio.Scanner pour lire les lignes de l'entrée standard.
Optimisation pour la conversion d'entiers
Au lieu d'utiliser bufio.Scanner.Text() pour obtenir la représentation textuelle puis la convertir en entier à l'aide de strconv.Atoi(), utilisez une fonction de conversion dédiée pour extraire le nombre directement des octets bruts renvoyés par bufio.Scanner.Bytes(). Cette méthode évite les conversions de chaînes inutiles et l'allocation de mémoire, améliorant considérablement les performances.
func toInt(buf []byte) (n int) { for _, v := range buf { n = n*10 + int(v-'0') } return }
Solution optimisée complète
La solution optimisée suivante lit les entrées beaucoup plus rapidement et répond au SPOJ. exigences relatives aux délais :
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 }
Supplémentaires Notes
for scanner.Scan() { if toInt(scanner.Bytes())%k == 0 { c++ } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!