GO语言数据结构:最大子列和问题
给定K个整数组成的序列{ N1, N2, …, N**K },“连续子列”被定义为{ Ni, Ni+1, …, Nj },其中 1≤i≤j≤K。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列{ -2, 11, -4, 13, -5, -2 },其连续子列{ 11, -4, 13 }有最大的和20。现要求你编写程序,计算给定整数序列的最大子列和。
本题旨在测试各种不同的算法在各种数据情况下的表现。各组测试数据特点如下:
- 数据1:与样例等价,测试基本正确性;
- 数据2:10^2个随机整数;
- 数据3:10^3个随机整数;
- 数据4:10^4个随机整数;
- 数据5:10^5个随机整数;
算法:在线处理
“在线”的意思是指每输入一个数据就进行即时处理,在任何一个地方中止输入,算法都能正确给出当前的解。
package main
import "fmt"
func main() {
var n int
fmt.Scanln(&n)
a := make([]int,n)
for i := 0; i < n; i++ {
fmt.Scan(&a[i])
}
var sum,max int
for i := 0; i < n; i++ {
sum += a[i]
if sum > max {
max = sum
}else if sum < 0 {
sum = 0
}
}
fmt.Println(max)
}
运行结果
5
5 -1 5 8 3
20