当需要求数组中某连续几项和时可用这个方法,通过先构建前n项和组成新切片,然后通过相减操作即可实现指定连续几项和
package main
import "log"
func main() {
arr := []int{2, 3, 1, 5, -2}
log.Println(arr)
sum := preSumArray(arr)
l := 1
r := 3
log.Println("数组范围[", l, "...", r, "]上累加和:", getSum(sum, l, r))
}
func preSumArray(arr []int) []int {
n := len(arr)
//构建前n项和新切片
sum := make([]int, n)
sum[0] = arr[0]
for i := 1; i < n; i++ {
sum[i] = sum[i-1] + arr[i]
}
return sum
}
func getSum(sum []int, l, r int) int {
//第一项为0时,可不用相减操作,直接就是前n项和
if l == 0 {
return sum[r]
} else {
return sum[r] - sum[l-1]
}
}
时间复杂度为O(1)