【Leetcode解題】307. Range Sum Query - Mutable
題目
解題概念
- 此題簡單來說,就是要處理簡單物件導向的操作
- NumArray + 一陣列
nums: 建立一物件,並將nums放入其中 - update +
index+val: 將nums[index]的值改為val - sumRange +
left+right: 回傳從nums[left]+nums[left + 1]+ $\cdots$ +nums[right]之總和
- NumArray + 一陣列
- 而在實際執行上,有以下兩種做法
Method 1 : 直觀寫法
- 解題概念 : 就照直觀的題意去寫
- 實際程式碼 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16class 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 : 提升效率寫法
- 解題概念 :
NumArray: 先把sum加總好update: 同時更新arr中的值與sum值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
22class 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
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Robin's Tech Blog!


