我写了这段代码,但是代码测试站点由于处理时间而被拒绝。为了减少时间,我使用了两个指针算法和 Goroutine(我不确定我是否正确使用它)。但该网站仍然以同样的原因被拒绝。有什么改进的解决方案可以通过吗?如何减少处理时间。请查看我的代码。谢谢您的支持!
问题描述
N 个数的序列 A[1], A[2], ... , A[N] 存在。在这个序列中从 i 到 j 的数字之和 A[i]+A[i+1]+... 编写程序求 +A[j-1]+A[j] 变为 M 的情况的数量。
输入
在第一行中,给出了 N(1≤N≤10,000) 和 M(1≤M≤300,000,000)。下一行包含 A[1], A[2], ... , A[N] 是给定的,用空格分隔。每个 A[x] 是一个不超过 30,000 的自然数。
打印
第一行的病例数。
例子
输入 1:
4 2
1 1 1 1
输出 1:
3
输入 2:
10 5
1 2 3 4 2 5 3 1 1 2
输出 2:
3
package main
import "fmt"
func main() {
var n int //numbers
var m int //target sum
c := make(chan []int)
d := make(chan int)
fmt.Scanf("%d %d\n", &n, &m)
arr := make([]int, n)
go ReadN(arr, n, c)
go checker(<-c, n, m, d)
fmt.Print(<-d)
}
func ReadN(arr []int, n int, c chan<- []int) {
for i := 0; i < n; i++ {
fmt.Scan(&arr[i])
}
c <- arr
}
func checker(arr []int, n, m int, d chan<- int) {
var start int
var end int
var sum int
var result int
for start < n {
if sum > m || end == n {
sum -= arr[start]
start++
} else {
sum += arr[end]
end++
}
if sum == m {
result++
}
}
d <- result
}
慕工程0101907
月关宝盒
莫回无
随时随地看视频慕课网APP
相关分类