尝试解决https://codeforces.com/problemset/problem/803/B 我的代码对于较小的输入工作正常,但是当出现大数字(9 位数字)的测试时,它不断出现运行时错误。 当我第一次尝试检查扫描的数组值时(如果 street[i] == 0),它让我感到恐慌。由于对于较小的输入一切都很好,然后它突然提到恐慌:运行时错误:索引超出范围[1]长度为1,我认为这是某种扫描和存储值问题。但是,我无法自己修复它。如何绕过这个“限制”?
代码示例:
package main
import (
"bufio"
"math"
"os"
"strconv"
"strings"
)
func closestZero(houses int, street []int) []int {
distance := make([]int, houses)
if street[0] == 0 {
distance[0] = 0
} else {
distance[0] = math.MaxInt32
}
for i := 1; i < houses; i++ {
distance[i] = distance[i-1] + 1
if street[i] == 0 {
distance[i] = 0
}
}
if street[houses-1] == 0 {
distance[houses-1] = 0
}
for i := houses - 2; i >= 0; i-- {
distance[i] = min(distance[i], distance[i+1]+1)
if street[i] == 0 {
distance[i] = 0
}
}
return distance
}
func main() {
scanner := makeScanner()
houses := readInt(scanner)
street := readArray(scanner)
printArray(closestZero(houses, street))
}
func makeScanner() *bufio.Scanner {
const maxCapacity = 3 * 1024 * 1024
buf := make([]byte, maxCapacity)
scanner := bufio.NewScanner(os.Stdin)
scanner.Buffer(buf, maxCapacity)
return scanner
}
func readArray(scanner *bufio.Scanner) []int {
scanner.Scan()
listString := strings.Split(scanner.Text(), " ")
arr := make([]int, len(listString))
for i := 0; i < len(listString); i++ {
arr[i], _ = strconv.Atoi(listString[i])
}
return arr
}
func readInt(scanner *bufio.Scanner) int {
scanner.Scan()
stringInt := scanner.Text()
res, _ := strconv.Atoi(stringInt)
return res
}
func printArray(arr []int) {
writer := bufio.NewWriter(os.Stdout)
for i := 0; i < len(arr); i++ {
writer.WriteString(strconv.Itoa(arr[i]))
writer.WriteString(" ")
}
writer.Flush()
}
谢谢。
将 ints 更改为 int64 并调整 buff 的大小。