Golang出现大数字时扫描读取麻烦

问题描述 投票:0回答:1

尝试解决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()
} 

谢谢。

arrays go buffer
1个回答
0
投票

将 ints 更改为 int64 并调整 buff 的大小。

© www.soinside.com 2019 - 2024. All rights reserved.