MyCode
type NumArray struct {
Arr []int
}
func Constructor(nums []int) NumArray {
return NumArray{Arr:nums}
}
// 简单的遍历求和
func (this *NumArray) SumRange(left aint, right int) int {
res := 0
for i := left;i <= right;i++ {
res += this.Arr[i]
}
return res
}
OfficialCode
type NumArray struct {
sums []int
}
func Constructor(nums []int) NumArray {
sums := make([]int, len(nums)+1)
for i, v := range nums {
sums[i+1] = sums[i] + v
}
return NumArray{sums}
}
func (na *NumArray) SumRange(i, j int) int {
return na.sums[j+1] - na.sums[i]
}
官方的解法是初始化时就将当前所在索引 K 对应的前缀和计算出来,这样子实际调用求解函数时就能够以 O(1) 的时间复杂度给出解。
Σ
0
k
\Sigma_0^k
Σ0k
思想值得借鉴,但是对于这个题来说这样子有点极端了(个人看法)