1. 程式人生 > >【LeetCode 簡單題】75-區域與檢索陣列不可變

【LeetCode 簡單題】75-區域與檢索陣列不可變

宣告:

今天是第75道題。給定一個整數陣列  nums,求出陣列從索引 到 j  (i ≤ j) 範圍內元素的總和,包含 i,  j 兩點。以下所有程式碼經過樓主驗證都能在LeetCode上執行成功,程式碼也是借鑑別人的,在文末會附上參考的部落格連結,如果侵犯了博主的相關權益,請聯絡我刪除

(手動比心ღ( ´・ᴗ・` ))

正文

題目:給定一個整數陣列  nums,求出陣列從索引 到 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

說明:

  1. 你可以假設陣列不可變。
  2. 會多次呼叫 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