提高輸入掃描速度以加快程式執行速度
問題陳述
問題陳述給定的程式碼嘗試透過迭代數字列表並確定每個數字是否為解決SPOJ 問題可被常數k 整除。然而,由於感知輸入掃描速度較慢,執行逾時。
解決方案
利用bufio.Scanner來增強輸入掃描效率,我們可以利用它掃描效率,我們可以利用它掃描.Scanner,它是為高速逐行輸入處理而客製化的。我們使用 bufio.Scanner 來檢索輸入行,而不是預設的 fmt.Scan。
最佳化數字轉換為了改善數字轉換,我們引入了 toInt()函數,它直接從原始輸入位元組中提取數字。這避免了 Scanner.Text() 的較慢轉換方法,並消除了不必要的字串建立。 toInt() 透過迭代輸入位元組並將結果逐漸乘以 10 來實現這一點。這些位元組對應於 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) } func toInt(buf []byte) (n int) { for _, v := range buf { n = n*10 + int(v-'0') } return }
下面修訂後的程式碼片段包含了這些最佳化:
附加說明for scanner.Scan() { if toInt(scanner.Bytes())%k == 0 { c++ } }
以上是bufio.Scanner 和最佳化的數位轉換如何加速 Go 程式中的輸入掃描?的詳細內容。更多資訊請關注PHP中文網其他相關文章!