3_每日一刷-Range_Sum_Query_Mutable

[每日一刷] (Range Sum Query Mutable)
Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive.
The update(i, val) function modifies nums by updating the element at index i to val.


Example:
Given nums = [1, 3, 5]

sumRange(0, 2) -> 9
update(1, 2)
sumRange(0, 2) -> 8

解题思路


看到对区间的查找和修改,可以判断这是一道非常典型的线段树的问题,直接用线段树求解即可。

然而在实际操作中还是遇到了一点点问题,主要是对python的类不够熟悉。简单做个总结好了

1.python类的构造函数只能有一个,但可以通过默认参数实现多态
2.python类中的变量分为类变量和成员变量。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class TestClass(object):
val1 = 100 # 类变量,没有self,可以由类名直接调用,也可以由对象调用
def __init__(self):
self.val2 = 200 # 成员变量,可以由类的对象来调用,以self.的形式给出
def fcn(self,val = 400):
val3 = 300 # fcn函数内部的局部变量
self.val4 = val # 不是成员变量,虽是以self.给出,但并没有在构造函数中初始化
self.val5 = 500
if __name__ == '__main__':
inst = TestClass()
# 运行结果
inst1 = TestClass()
inst2 = TestClass()
print TestClass.val1 # 100
print inst1.val1 # 100
inst1.val1 = 1000
print inst1.val1 # 1000
print TestClass.val1 # 100
TestClass.val1 =2000
print inst1.val1 # 1000
print TestClass.val1 # 2000
print inst2.val1 # 2000
inst3 = TestClass()
print inst3.val1 # 2000
# 类本身拥有自己的类变量(保存在内存),当一个TestClass类的对象被构造时,会将当前类变量拷贝一份给这个对象,
# 当前类变量的值是多少,这个对象拷贝得到的类变量的值就是多少;而且,通过对象来修改类变量,并不会影响其他对象的类变量的值,
# 因为大家都有各自的副本,更不会影响类本身所拥有的那个类变量的值;只有类自己才能改变类本身拥有的类变量的值。