rustgym/leetcode/
_303_range_sum_query.rs

1struct NumArray {
2    prefix_sums: Vec<i32>,
3}
4
5impl NumArray {
6    fn new(mut nums: Vec<i32>) -> Self {
7        for i in 1..nums.len() {
8            nums[i] += nums[i - 1];
9        }
10        NumArray { prefix_sums: nums }
11    }
12
13    fn sum_range(&self, i: i32, j: i32) -> i32 {
14        let j: usize = j as usize;
15        let i: usize = i as usize;
16        if i == 0 {
17            self.prefix_sums[j]
18        } else {
19            self.prefix_sums[j] - self.prefix_sums[i - 1]
20        }
21    }
22}
23
24#[test]
25fn test() {
26    let obj = NumArray::new(vec![-2, 0, 3, -5, 2, -1]);
27    assert_eq!(obj.sum_range(0, 2), 1);
28    assert_eq!(obj.sum_range(2, 5), -1);
29    assert_eq!(obj.sum_range(0, 5), -3);
30}