題目

解題概念

  • 此題簡單來說,就是要處理簡單物件導向的操作
    1. NumArray + 一陣列 nums : 建立一物件,並將 nums 放入其中
    2. update + index + val : 將 nums[index] 的值改為 val
    3. sumRange + left + right : 回傳從 nums[left] + nums[left + 1] + $\cdots$ + nums[right] 之總和
  • 而在實際執行上,有以下兩種做法

Method 1 : 直觀寫法

  • 解題概念 : 就照直觀的題意去寫
  • 實際程式碼 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    class NumArray(object):
    arr = []
    def __init__(self, nums):

    # 指定 arr
    self.arr = nums

    def update(self, index, val):

    # 直接改值
    self.arr[index] = val

    def sumRange(self, left, right):

    # 用 Python 的 sum() 去做加總
    return sum(self.arr[left:right+1])
  • 問題 : Runtime Error

Method 2 : 提升效率寫法

  • 解題概念 :
    1. NumArray : 先把 sum 加總好
    2. update : 同時更新 arr 中的值與 sum
    3. sumRange : 回傳 sum - 「arr[left] 左邊的值」 - 「arr[right] 右邊的值」
  • 實際程式碼 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    class NumArray(object):
    arr = []
    sum = 0
    def __init__(self, nums):

    self.arr = nums
    self.sum = sum(nums)

    def update(self, index, val):

    self.sum -= self.arr[index]
    self.arr[index] = val
    self.sum += val

    def sumRange(self, left, right):

    res = self.sum
    for i in range(0, left):
    res -= self.arr[i]
    for j in range(right+1, len(self.arr)) :
    res -= self.arr[j]
    return res