1. 程式人生 > >LeetCode刷題記錄——第303題(區域和檢索 - 陣列不可變)

LeetCode刷題記錄——第303題(區域和檢索 - 陣列不可變)

題目描述

給定一個整數陣列 nums,求出陣列從索引 i 到 j (i ≤ j) 範圍內元素的總和,包含 i, j 兩點。

示例:

給定 nums = [-2, 0, 3, -5, 2, -1],求和函式為 sumRange()
sumRange(0, 2) -> 1
sumRange(2, 5) -> -1
sumRange(0, 5) -> -3

說明:
你可以假設陣列不可變。
會多次呼叫 sumRange 方法。

思路分析

  • 利用self.add記錄累積和
  • 需要注意的是self.add的第0項為0,第一項為nums的第0項的和。所以要求第j項的和的時候需要add中第j+1項的值,這一點想清楚,然後減去add中第i項,因為算sumRange時nums中的第i項是要包括進來滴。

程式碼示例

class NumArray:

    def __init__(self, nums):
        """
        :type nums: List[int]
        """
        self.add = [0]
        for num in nums:
            self.add.append(self.add[-1] + num)
        

    def sumRange(self, i, j):
        """
        :type i: int
        :type j: int
        :rtype: int
        """
return self.add[j+1] - self.add[i] # Your NumArray object will be instantiated and called as such: # obj = NumArray(nums) # param_1 = obj.sumRange(i,j)