【LeetCode 簡單題】75-區域與檢索陣列不可變
阿新 • • 發佈:2018-11-07
宣告:
今天是第75道題。給定一個整數陣列 nums,求出陣列從索引 i 到 j (i ≤ j) 範圍內元素的總和,包含 i, j 兩點。以下所有程式碼經過樓主驗證都能在LeetCode上執行成功,程式碼也是借鑑別人的,在文末會附上參考的部落格連結,如果侵犯了博主的相關權益,請聯絡我刪除
(手動比心ღ( ´・ᴗ・` ))
正文
題目:給定一個整數陣列 nums,求出陣列從索引 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 方法。
解法1。按照題目是隻要寫完這個類就可以了,程式碼如下。
執行用時: 624 ms, 在Range Sum Query - Immutable的Python提交中擊敗了34.06% 的使用者
class NumArray(object): def __init__(self, nums): """ :type nums: List[int] """ self.nums = nums def sumRange(self, i, j): """ :type i: int :type j: int :rtype: int """ return sum(self.nums[i:j+1]) # sum函式還能這樣用 # Your NumArray object will be instantiated and called as such: # obj = NumArray(nums) # param_1 = obj.sumRange(i,j)
解法2。這裡把求和放到__init__函式中,似乎這樣會快些?聲明瞭一個私有變數__dp來儲存某個index之前的和,程式碼如下。
執行用時: 48 ms, 在Range Sum Query - Immutable的Python提交中擊敗了97.81% 的使用者
- _var :變數名前一個下劃線來定義,此變數為保護成員protected,只有類及其子類可以訪問。此變數不能通過from XXX import xxx 匯入
- __var:變數名前兩個下劃線來定義,此變數為私有private,只允許類本身訪問,連子類都不可以訪問
class NumArray(object):
def __init__(self, nums):
"""
:type nums: List[int]
"""
self.nums = nums
self.__dp = [0]*len(nums)
sum_n = 0
for i in range(len(nums)):
sum_n += nums[i]
self.__dp[i] == sum_n
def sumRange(self, i, j):
"""
:type i: int
:type j: int
:rtype: int
"""
if i == 0:
return self.__dp[j]
else:
return self.__dp[j] - self.__dp[i-1]
# Your NumArray object will be instantiated and called as such:
# obj = NumArray(nums)
# param_1 = obj.sumRange(i,j)
結尾
解法1&解法2:https://blog.csdn.net/qq_34364995/article/details/80715438