Skip to content

Commit 35eef48

Browse files
committed
feat: add solutions to lc problem: No.0303
No.0303.Range Sum Query - Immutable
1 parent 67c5207 commit 35eef48

File tree

11 files changed

+281
-49
lines changed

11 files changed

+281
-49
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
- [排序数组](/solution/0900-0999/0912.Sort%20an%20Array/README.md) - 快速排序、归并排序
4242
- [字符串相加](/solution/0400-0499/0415.Add%20Strings/README.md) - 高精度加法
4343
- [字符串相乘](/solution/0000-0099/0043.Multiply%20Strings/README.md) - 高精度乘法
44+
- [区域和检索 - 数组不可变](/solution/0300-0399/0303.Range%20Sum%20Query%20-%20Immutable/README.md) - 前缀和
4445
- [二维区域和检索 - 矩阵不可变](/solution/0300-0399/0304.Range%20Sum%20Query%202D%20-%20Immutable/README.md) - 二维前缀和
4546
- [ 用邮票贴满网格图](/solution/2100-2199/2132.Stamping%20the%20Grid/README.md) - 二维前缀和、二维差分
4647
<!-- 排序算法、待补充 -->

README_EN.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ Complete solutions to [LeetCode](https://leetcode.com/problemset/all/), [LCOF](h
4040
- [Sort an Array](/solution/0900-0999/0912.Sort%20an%20Array/README_EN.md) - Quick Sort, Merge Sort
4141
- [Add Strings](/solution/0400-0499/0415.Add%20Strings/README_EN.md) - Addition of large numbers
4242
- [Multiply Strings](/solution/0000-0099/0043.Multiply%20Strings/README_EN.md) - Multiply large numbers
43+
- [Range Sum Query - Immutable](/solution/0300-0399/0303.Range%20Sum%20Query%20-%20Immutable/README_EN.md) - Prefix sum
4344
- [Range Sum Query 2D - Immutable](/solution/0300-0399/0304.Range%20Sum%20Query%202D%20-%20Immutable/README_EN.md) - Prefix sum
4445
- [ Stamping the Grid](/solution/2100-2199/2132.Stamping%20the%20Grid/README_EN.md) - Prefix sum, Difference array
4546

solution/0300-0399/0303.Range Sum Query - Immutable/README.md

Lines changed: 97 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ numArray.sumRange(0, 5); // return -3 ((-2) + 0 + 3 + (-5) + 2 + (-1))
5252

5353
<!-- 这里可写通用的实现逻辑 -->
5454

55+
**方法一:前缀和**
56+
57+
前缀和计算公式:`s[i + 1] = s[i] + nums[i]`
58+
5559
<!-- tabs:start -->
5660

5761
### **Python3**
@@ -62,19 +66,15 @@ numArray.sumRange(0, 5); // return -3 ((-2) + 0 + 3 + (-5) + 2 + (-1))
6266
class NumArray:
6367

6468
def __init__(self, nums: List[int]):
65-
n = len(nums)
66-
self.sums = [0] * (n + 1)
67-
for i in range(n):
68-
self.sums[i + 1] = nums[i] + self.sums[i]
69-
69+
self.s = [0] + list(accumulate(nums))
7070

71-
def sumRange(self, i: int, j: int) -> int:
72-
return self.sums[j + 1] - self.sums[i]
71+
def sumRange(self, left: int, right: int) -> int:
72+
return self.s[right + 1] - self.s[left]
7373

7474

7575
# Your NumArray object will be instantiated and called as such:
7676
# obj = NumArray(nums)
77-
# param_1 = obj.sumRange(i,j)
77+
# param_1 = obj.sumRange(left,right)
7878
```
7979

8080
### **Java**
@@ -83,26 +83,77 @@ class NumArray:
8383

8484
```java
8585
class NumArray {
86-
87-
private int[] sums;
86+
private int[] s;
8887

8988
public NumArray(int[] nums) {
9089
int n = nums.length;
91-
sums = new int[n + 1];
90+
s = new int[n + 1];
9291
for (int i = 0; i < n; ++i) {
93-
sums[i + 1] = nums[i] + sums[i];
92+
s[i + 1] = s[i] + nums[i];
9493
}
9594
}
96-
97-
public int sumRange(int i, int j) {
98-
return sums[j + 1] - sums[i];
95+
96+
public int sumRange(int left, int right) {
97+
return s[right + 1] - s[left];
9998
}
10099
}
101100

102101
/**
103102
* Your NumArray object will be instantiated and called as such:
104103
* NumArray obj = new NumArray(nums);
105-
* int param_1 = obj.sumRange(i,j);
104+
* int param_1 = obj.sumRange(left,right);
105+
*/
106+
```
107+
108+
### **C++**
109+
110+
```cpp
111+
class NumArray {
112+
public:
113+
vector<int> s;
114+
115+
NumArray(vector<int>& nums) {
116+
int n = nums.size();
117+
s.resize(n + 1);
118+
for (int i = 0; i < n; ++i) s[i + 1] = s[i] + nums[i];
119+
}
120+
121+
int sumRange(int left, int right) {
122+
return s[right + 1] - s[left];
123+
}
124+
};
125+
126+
/**
127+
* Your NumArray object will be instantiated and called as such:
128+
* NumArray* obj = new NumArray(nums);
129+
* int param_1 = obj->sumRange(left,right);
130+
*/
131+
```
132+
133+
### **Go**
134+
135+
```go
136+
type NumArray struct {
137+
s []int
138+
}
139+
140+
func Constructor(nums []int) NumArray {
141+
n := len(nums)
142+
s := make([]int, n+1)
143+
for i, v := range nums {
144+
s[i+1] = s[i] + v
145+
}
146+
return NumArray{s}
147+
}
148+
149+
func (this *NumArray) SumRange(left int, right int) int {
150+
return this.s[right+1] - this.s[left]
151+
}
152+
153+
/**
154+
* Your NumArray object will be instantiated and called as such:
155+
* obj := Constructor(nums);
156+
* param_1 := obj.SumRange(left,right);
106157
*/
107158
```
108159

@@ -174,6 +225,36 @@ impl NumArray {
174225
*/
175226
```
176227

228+
### **JavaScript**
229+
230+
```js
231+
/**
232+
* @param {number[]} nums
233+
*/
234+
var NumArray = function (nums) {
235+
const n = nums.length;
236+
this.s = new Array(n + 1).fill(0);
237+
for (let i = 0; i < n; ++i) {
238+
this.s[i + 1] = this.s[i] + nums[i];
239+
}
240+
};
241+
242+
/**
243+
* @param {number} left
244+
* @param {number} right
245+
* @return {number}
246+
*/
247+
NumArray.prototype.sumRange = function (left, right) {
248+
return this.s[right + 1] - this.s[left];
249+
};
250+
251+
/**
252+
* Your NumArray object will be instantiated and called as such:
253+
* var obj = new NumArray(nums)
254+
* var param_1 = obj.sumRange(left,right)
255+
*/
256+
```
257+
177258
### **...**
178259

179260
```

solution/0300-0399/0303.Range Sum Query - Immutable/README_EN.md

Lines changed: 93 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -54,45 +54,92 @@ numArray.sumRange(0, 5); // return (-2) + 0 + 3 + (-5) + 2 + (-1) = -3
5454
class NumArray:
5555

5656
def __init__(self, nums: List[int]):
57-
n = len(nums)
58-
self.sums = [0] * (n + 1)
59-
for i in range(n):
60-
self.sums[i + 1] = nums[i] + self.sums[i]
57+
self.s = [0] + list(accumulate(nums))
6158

62-
63-
def sumRange(self, i: int, j: int) -> int:
64-
return self.sums[j + 1] - self.sums[i]
59+
def sumRange(self, left: int, right: int) -> int:
60+
return self.s[right + 1] - self.s[left]
6561

6662

6763
# Your NumArray object will be instantiated and called as such:
6864
# obj = NumArray(nums)
69-
# param_1 = obj.sumRange(i,j)
65+
# param_1 = obj.sumRange(left,right)
7066
```
7167

7268
### **Java**
7369

7470
```java
7571
class NumArray {
76-
77-
private int[] sums;
72+
private int[] s;
7873

7974
public NumArray(int[] nums) {
8075
int n = nums.length;
81-
sums = new int[n + 1];
76+
s = new int[n + 1];
8277
for (int i = 0; i < n; ++i) {
83-
sums[i + 1] = nums[i] + sums[i];
78+
s[i + 1] = s[i] + nums[i];
8479
}
8580
}
86-
87-
public int sumRange(int i, int j) {
88-
return sums[j + 1] - sums[i];
81+
82+
public int sumRange(int left, int right) {
83+
return s[right + 1] - s[left];
8984
}
9085
}
9186

9287
/**
9388
* Your NumArray object will be instantiated and called as such:
9489
* NumArray obj = new NumArray(nums);
95-
* int param_1 = obj.sumRange(i,j);
90+
* int param_1 = obj.sumRange(left,right);
91+
*/
92+
```
93+
94+
### **C++**
95+
96+
```cpp
97+
class NumArray {
98+
public:
99+
vector<int> s;
100+
101+
NumArray(vector<int>& nums) {
102+
int n = nums.size();
103+
s.resize(n + 1);
104+
for (int i = 0; i < n; ++i) s[i + 1] = s[i] + nums[i];
105+
}
106+
107+
int sumRange(int left, int right) {
108+
return s[right + 1] - s[left];
109+
}
110+
};
111+
112+
/**
113+
* Your NumArray object will be instantiated and called as such:
114+
* NumArray* obj = new NumArray(nums);
115+
* int param_1 = obj->sumRange(left,right);
116+
*/
117+
```
118+
119+
### **Go**
120+
121+
```go
122+
type NumArray struct {
123+
s []int
124+
}
125+
126+
func Constructor(nums []int) NumArray {
127+
n := len(nums)
128+
s := make([]int, n+1)
129+
for i, v := range nums {
130+
s[i+1] = s[i] + v
131+
}
132+
return NumArray{s}
133+
}
134+
135+
func (this *NumArray) SumRange(left int, right int) int {
136+
return this.s[right+1] - this.s[left]
137+
}
138+
139+
/**
140+
* Your NumArray object will be instantiated and called as such:
141+
* obj := Constructor(nums);
142+
* param_1 := obj.SumRange(left,right);
96143
*/
97144
```
98145

@@ -164,6 +211,36 @@ impl NumArray {
164211
*/
165212
```
166213

214+
### **JavaScript**
215+
216+
```js
217+
/**
218+
* @param {number[]} nums
219+
*/
220+
var NumArray = function (nums) {
221+
const n = nums.length;
222+
this.s = new Array(n + 1).fill(0);
223+
for (let i = 0; i < n; ++i) {
224+
this.s[i + 1] = this.s[i] + nums[i];
225+
}
226+
};
227+
228+
/**
229+
* @param {number} left
230+
* @param {number} right
231+
* @return {number}
232+
*/
233+
NumArray.prototype.sumRange = function (left, right) {
234+
return this.s[right + 1] - this.s[left];
235+
};
236+
237+
/**
238+
* Your NumArray object will be instantiated and called as such:
239+
* var obj = new NumArray(nums)
240+
* var param_1 = obj.sumRange(left,right)
241+
*/
242+
```
243+
167244
### **...**
168245

169246
```
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class NumArray {
2+
public:
3+
vector<int> s;
4+
5+
NumArray(vector<int>& nums) {
6+
int n = nums.size();
7+
s.resize(n + 1);
8+
for (int i = 0; i < n; ++i) s[i + 1] = s[i] + nums[i];
9+
}
10+
11+
int sumRange(int left, int right) {
12+
return s[right + 1] - s[left];
13+
}
14+
};
15+
16+
/**
17+
* Your NumArray object will be instantiated and called as such:
18+
* NumArray* obj = new NumArray(nums);
19+
* int param_1 = obj->sumRange(left,right);
20+
*/
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
type NumArray struct {
2+
s []int
3+
}
4+
5+
func Constructor(nums []int) NumArray {
6+
n := len(nums)
7+
s := make([]int, n+1)
8+
for i, v := range nums {
9+
s[i+1] = s[i] + v
10+
}
11+
return NumArray{s}
12+
}
13+
14+
func (this *NumArray) SumRange(left int, right int) int {
15+
return this.s[right+1] - this.s[left]
16+
}
17+
18+
/**
19+
* Your NumArray object will be instantiated and called as such:
20+
* obj := Constructor(nums);
21+
* param_1 := obj.SumRange(left,right);
22+
*/
Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,21 @@
11
class NumArray {
2-
3-
private int[] sums;
2+
private int[] s;
43

54
public NumArray(int[] nums) {
65
int n = nums.length;
7-
sums = new int[n + 1];
6+
s = new int[n + 1];
87
for (int i = 0; i < n; ++i) {
9-
sums[i + 1] = nums[i] + sums[i];
8+
s[i + 1] = s[i] + nums[i];
109
}
1110
}
1211

13-
public int sumRange(int i, int j) {
14-
return sums[j + 1] - sums[i];
12+
public int sumRange(int left, int right) {
13+
return s[right + 1] - s[left];
1514
}
1615
}
1716

1817
/**
1918
* Your NumArray object will be instantiated and called as such:
2019
* NumArray obj = new NumArray(nums);
21-
* int param_1 = obj.sumRange(i,j);
20+
* int param_1 = obj.sumRange(left,right);
2221
*/

0 commit comments

Comments
 (0)