LeetCode: Range Sum Query – Immutable Posted on January 12, 2018July 26, 2020 by braindenny Range Sum Query – Immutable Similar Problems: CheatSheet: Leetcode For Code Interview CheatSheet: Common Code Problems & Follow-ups Tag: #oodesign, #presum, #rangesum Given an integer array nums, find the sum of the elements between indices i and j (i <= j), inclusive. Example: Given nums = [-2, 0, 3, -5, 2, -1] sumRange(0, 2) -> 1 sumRange(2, 5) -> -1 sumRange(0, 5) -> -3 Note: You may assume that the array does not change. There are many calls to sumRange function. Github: code.dennyzhang.com Credits To: leetcode.com Leave me comments, if you have better ways to solve. // https://code.dennyzhang.com/range-sum-query-immutable // Basic Ideas: presum // Complexity: Time O(n), Space O(n) type NumArray struct { l []int } func Constructor(nums []int) NumArray { // add a dummy node to caculate nums[0...i] l := make([]int, len(nums)+1) for i, v := range nums{ l[i+1] = l[i] + v } return NumArray{l:l} } func (this *NumArray) SumRange(i int, j int) int { return this.l[j+1]-this.l[i] } /** * Your NumArray object will be instantiated and called as such: * obj := Constructor(nums); * param_1 := obj.SumRange(i,j); */ ## https://code.dennyzhang.com/range-sum-query-immutable class NumArray(object): def __init__(self, nums): """ :type nums: List[int] """ length = len(nums) self._nums = nums self._sum = [0] * length sum_value = 0 for i in range(0, length): sum_value += nums[i] self._sum[i] = sum_value def sumRange(self, i, j): """ :type i: int :type j: int :rtype: int """ return self._sum[j] - (self._sum[i-1] if i>0 else 0) # Your NumArray object will be instantiated and called as such: # obj = NumArray(nums) # param_1 = obj.sumRange(i,j) Post Views: 6