-
-
Notifications
You must be signed in to change notification settings - Fork 5.8k
/
Copy path303. Range Sum Query - Immutable.go
55 lines (45 loc) · 1.09 KB
/
303. Range Sum Query - Immutable.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package leetcode
import (
"github.com/halfrost/LeetCode-Go/template"
)
//解法一 线段树,sumRange 时间复杂度 O(1)
// NumArray define
type NumArray struct {
st *template.SegmentTree
}
// Constructor303 define
func Constructor303(nums []int) NumArray {
st := template.SegmentTree{}
st.Init(nums, func(i, j int) int {
return i + j
})
return NumArray{st: &st}
}
// SumRange define
func (ma *NumArray) SumRange(i int, j int) int {
return ma.st.Query(i, j)
}
//解法二 prefixSum,sumRange 时间复杂度 O(1)
// // NumArray define
// type NumArray struct {
// prefixSum []int
// }
// // Constructor303 define
// func Constructor303(nums []int) NumArray {
// for i := 1; i < len(nums); i++ {
// nums[i] += nums[i-1]
// }
// return NumArray{prefixSum: nums}
// }
// // SumRange define
// func (this *NumArray) SumRange(i int, j int) int {
// if i > 0 {
// return this.prefixSum[j] - this.prefixSum[i-1]
// }
// return this.prefixSum[j]
// }
/**
* Your NumArray object will be instantiated and called as such:
* obj := Constructor(nums);
* param_1 := obj.SumRange(i,j);
*/