# code tpl {%hackmd theme-dark %} [2, 3, 5, 6] ^ ^ # 1-4 # (0-4) - (0-1) = N = number of array TC(N) SC(N) 1-6 [], int start, int end, loop s to end: ans+= N = number of array TC(N) SC(1) [[1, 2, 3], [4, 5, 6]] => [1 2 3 4 5 6] [1, 2], 3, 5] < [2, 3], 4, 6] < [4, 5, [7*, 9*]] [1, 2, [3*, 5*]] [1, 2, [3*, 5*]] prefix(x2, y2) - prefix(x1, y1) for x1 to x2: for y1 to y2: ans+=item x1:2, y1:2, x2:3, y2:3 [ ] ] [ ] ] [ ](x1, y1) (x1, y2) [ (0-x2, 0-y1-1)](x2, y1) (x2, y2) ```python= Class Test: #N = number of array # TC O(N) def init(self, arr): # [1, 2, 3, 4] # contruct prefix sum array prefix = 0 self.prefixSum = [] for n in arr: prefix += n # 1+2 self.prefixSum.append(prefix) #[1, 3, 6, 10] # getRange so many times # TC O(1) def getRange(self, x1, y1, x2, y2): idx1D = getIdx(x1, y1) # 1, 2 # 3, 3 endSum = self.prefixSum[end] #10 pre = start-1 # 2 if pre == -1: startSum = 0 else: startSum = self.prefixSum[pre] #1 , 6 return endSum - startSum # 1-0=1, 6-1=5, 10-6=4 ``` ###### tags: `mock interview` `面試`