声明:
今天是第75道题。给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点。以下所有代码经过楼主验证都能在LeetCode上执行成功,代码也是借鉴别人的,在文末会附上参考的博客链接,如果侵犯了博主的相关权益,请联系我删除
(手动比心ღ( ´・ᴗ・` ))
正文
题目:给定一个整数数组 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 方法。
解法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