303. 区域和检索 - 数组不可变 【数组前缀和】

41 阅读1分钟

303. 区域和检索 - 数组不可变

image.png

image.png

image.png

class NumArray:

    def __init__(self, nums: List[int]):
        # 数组 是不变的, 一次处理即可
        self.SumList = [0]
        for num in nums:
            self.SumList.append(self.SumList[-1] + num)

    def sumRange(self, left: int, right: int) -> int:
        return self.SumList[right + 1] - self.SumList[left]


# Your NumArray object will be instantiated and called as such:
# obj = NumArray(nums)
# param_1 = obj.sumRange(left,right)
class NumArray:

    def __init__(self, nums: List[int]):
        # 数组 是不变的, 一次处理即可
        # self.SumList = [0]
        # for num in nums:
        #     self.SumList.append(self.SumList[-1] + num)
        self.SumList = list(accumulate(nums, initial=0))

    def sumRange(self, left: int, right: int) -> int:
        return self.SumList[right + 1] - self.SumList[left]


# Your NumArray object will be instantiated and called as such:
# obj = NumArray(nums)
# param_1 = obj.sumRange(left,right)
class NumArray {
public:
    vector<int> s;
    NumArray(vector<int>& nums) {        
        s.emplace_back(0);
        for (int &num : nums){
            s.emplace_back(s.back() + num);
        }
    }
    
    int sumRange(int left, int right) {
        return s[right + 1] - s[left];
    }
};

/**
 * Your NumArray object will be instantiated and called as such:
 * NumArray* obj = new NumArray(nums);
 * int param_1 = obj->sumRange(left,right);
 */