首頁 >後端開發 >Golang >如何優化 Go 中的輸入掃描以避免逾時?

如何優化 Go 中的輸入掃描以避免逾時?

Barbara Streisand
Barbara Streisand原創
2024-12-17 17:04:10355瀏覽

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

優化輸入掃描以加快執行速度

為了解決SPOJ 問題遇到的超時問題,需要進行特定的最佳化以加快輸入掃描速度。

利用 bufio.Scanner 進行線路讀取

不要單獨使用 fmt.Scan,而是利用 bufio.Scanner 高效地從輸入中讀取行。

自訂數字轉換以提高速度

由於只需要數位輸入,因此可以實現自訂數字轉換器來直接從原始位元組中提取整數。由於避免了不必要的字串轉換和開銷,這比使用 Scanner.Text 顯著提高了效能。

自訂數位轉換器實作

函數toInt 旨在將原始位元組轉換為有效地計算整數:

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

此函數利用數字到UTF-8 編碼位元組的一對一映射輸入。

改良的解決方案

結合這些最佳化,改良後的解決方案如下:

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)
}

最佳化的好處

最佳化的好處最佳化的好處最佳化的好處最佳化的好處這種最佳化的解決方案顯著提高了輸入掃描速度,確保程式可以在規定的時間內處理必要的輸入。自訂數位轉換器以及 bufio.Scanner 的使用可以最大限度地減少運行時開銷並提高程式效率。

以上是如何優化 Go 中的輸入掃描以避免逾時?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn