303. 区域和检索 - 数组不可变
给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点。
示例:
给定 nums = [-2, 0, 3, -5, 2, -1],求和函数为 sumRange()
sumRange(0, 2) -> 1
sumRange(2, 5) -> -1
sumRange(0, 5) -> -3
说明:
你可以假设数组不可变。
会多次调用 sumRange 方法。
https://leetcode-cn.com/problems/range-sum-query-immutable/
解法
type NumArray struct {
Value []int
}
func Constructor(nums []int) NumArray {
arr := NumArray{[]int{0}} // 浪费第一个空间
// 1, 2, 3, 4, 5
for i, v := range nums {
// 1, 3, 6, 10, 15
arr.Value = append(arr.Value, v + arr.Value[i])
}
return arr
}
func (this *NumArray) SumRange(i int, j int) int {
// i = 0; j = 3
// [3+1] - [0] = 15 - 1 = 14 = 1 + 2 + 3 + 4
return this.Value[j+1] - this.Value[i]
}