go快读 -- 处理超大数组读入

318 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第11天,点击查看活动详情

  • go的Scan读取非常浪费时间,我遇到了超大数组读入,会直接因为读取超时

image.png

  • 今天做算法题的时候遇到的问题,就是go的输入输出太浪费时间了,比java的Scanner还次,导致的TIMELIMT

  • 而且我还做过一个题,同样的代码,用c++写是200ms,用java写是4000ms,用go写是6000ms,就是读取和输出很浪费时间

  • 然后我找了一下,可以用文件读入的形式来解决这个问题,就类似于java的快读

  • 下面是我用的代码

    in := bufio.NewReader(os.Stdio) 
    var n,m int  
    fmt.Fscan(in, &n, &k)
    arr := make([]int,n)
    for i := range n{
        fmt.Fsacn(in,&arr[i])
    }
  • os.Stdio 是控制台输入,使用bufio.NewReader读取
  • 处理主要是使用了Fscan方法
func Fscan(r io.Reader, a ...interface{}) (n int, err error)
  • Fsacn是处理文件读取用的

    • Fscan从r扫描文本,将成功读取的空白分隔的值保存进成功传递给本函数的参数。换行视为空白。
    • 返回成功扫描的条目个数和遇到的任何错误。如果读取的条目比提供的参数少,会返回一个错误报告原因。
  • 然后贴上我遇到的滑动窗口算法题链接