Prefix Sum

Run Settings
LanguagePython
Language Version
Run Command
# Leet Code 303 # Given an integer array nums, handle multiple queries of the following type: # Calculate the sum of the elements of nums between indices left and right inclusive where left <= right. # Implement the NumArray class: # NumArray(int[] nums) Initializes the object with the integer array nums. # int sumRange(int left, int right) Returns the sum of the elements of nums between indices left and right inclusive (i.e. nums[left] + nums[left + 1] + ... + nums[right]). # Example 1: # Input # ["NumArray", "sumRange", "sumRange", "sumRange"] # [[[-2, 0, 3, -5, 2, -1]], [0, 2], [2, 5], [0, 5]] # Output # [null, 1, -1, -3] # Explanation # NumArray numArray = new NumArray([-2, 0, 3, -5, 2, -1]); # numArray.sumRange(0, 2); // return (-2) + 0 + 3 = 1 # numArray.sumRange(2, 5); // return 3 + (-5) + 2 + (-1) = -1 # numArray.sumRange(0, 5); // return (-2) + 0 + 3 + (-5) + 2 + (-1) = -3 # Constraints: # 1 <= nums.length <= 104 # -105 <= nums[i] <= 105 # 0 <= left <= right < nums.length # At most 104 calls will be made to sumRange. print("Brute force:") class NumArray: def __init__(self, nums: List[int]): # print(f"received following array: {nums}") self.nums = nums def sumRange(self, left: int, right: int) -> int: # print(f"preparing to sum from index={left} until={right}") sum = 0 for i, val in enumerate(self.nums[left:right+1]): # print(f"i={i}, val={val}") sum+=val # print(f"sum={sum}") return sum print("optimized with pre-sum / prefix sum") class NumArray: def __init__(self, nums: List[int]): self.nums = nums # prepare sum array sum = 0 self.pre_summed = [] for val in self.nums: sum+=val self.pre_summed.append(sum) print(f"pre-summed array={self.pre_summed}") def sumRange(self, left: int, right: int) -> int: if left==0: sum = self.pre_summed[right] else: sum = self.pre_summed[right] - self.pre_summed[left-1] return sum
Editor Settings
Theme
Key bindings
Full width
Lines