采取输入的最佳做法
问题描述:
我写了一个mergeSort
函数,它在750毫秒内整理了100万个整数,但需要9秒才能输入。采取输入的最佳做法
这是我如何接受我的切片,这是要排序的输入。
代码片段:
array := make([]int,n)
for i := 0; i < n; i++ {
fmt.Scanf("%d",&array[i])
}
我需要的是,一个有效的方式把整数作为输入到一个切片。 输入只包含整数,由空格或新行中的每个整数分隔。
样品输入1:
3
9
1
13
样品输入2:
3 9 1 13
如果有效的解决方案可用于任何一种类型的输入,这将是足够的
答
在假设您的输入是以空格分隔的有符号整数(以10为底),请尝试以下操作:
s := bufio.NewScanner(os.StdIn)
s.Split(bufio.ScanWords)
i := 0
for s.Scan() && i < n {
dest[i], _ = strconv.ParseInt(s.Text(), 10, 64)
i++
}
这显示了一个快速基准,比使用fmt.Scanf
快了约5倍。它可能会进一步优化,编写一个自定义拆分函数,不用担心解析UTF-8符文,并简单地拆分' '
。
你需要输入什么?它是基于10个字符串表示的一系列整数吗?他们只是签名还是未签名?如果你可以发布一个有用的样本。 –
以10为底的正常整数 – Nilsocket