python刷题总结_【python刷题】差分数组
前綴和主要適用的場景是原始數組不會被修改的情況下,頻繁查詢某個區間的累加和。
差分數組的主要適用場景是頻繁對原始數組的某個區間的元素進行增減。
class Difference:
def __init__(self, nums):
self.nums = nums
self.diff = self.make_diff(self.nums)
def make_diff(self, nums):
diff = [0 for _ in range(len(nums))]
diff[0] = nums[0]
for i in range(1,len(nums)):
diff[i] = nums[i] - nums[i-1]
return diff
# 給閉區間[i,j]增加val
# 原理很簡單,回想diff數組反推nums數組的過程,diff[i] += 3意味著給nums[i..]所有的元素都加了 3,然后diff[j+1] -= 3又意味著對于nums[j+1..]所有元素再減 3,那綜合起來,是不是就是對nums[i..j]中的所有元素都加 3 了?
def increment(self, i, j, val):
self.diff[i] += val
if j + 1 < len(self.diff):
self.diff[j + 1] -= val
def recover(self):
rdiff = [0 for _ in range(len(self.diff))]
rdiff[0] = self.diff[0]
for i in range(1,len(self.nums)):
rdiff[i] = rdiff[i-1] + self.diff[i]
return rdiff
difference = Difference([8,5,9,6,1])
print(difference.diff)
rdiff = difference.recover()
print(rdiff)
difference.increment(2,3,1)
print(difference.diff)
rdiff = difference.recover()
print(rdiff)
結果:
[8, -3, 4, -3, -5]
[8, 5, 9, 6, 1]
[8, -3, 5, -3, -6]
[8, 5, 10, 7, 1]
不妨去試試力扣第 1109 題「航班預訂統計]。
labuladong的算法小抄
總結
以上是生活随笔為你收集整理的python刷题总结_【python刷题】差分数组的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: springboot日志写入mysql_
- 下一篇: 9700k配什么主板
