日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python刷题总结_【python刷题】差分数组

發(fā)布時(shí)間:2023/12/15 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python刷题总结_【python刷题】差分数组 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前綴和主要適用的場景是原始數(shù)組不會(huì)被修改的情況下,頻繁查詢某個(gè)區(qū)間的累加和。

差分?jǐn)?shù)組的主要適用場景是頻繁對(duì)原始數(shù)組的某個(gè)區(qū)間的元素進(jìn)行增減。

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

# 給閉區(qū)間[i,j]增加val

# 原理很簡單,回想diff數(shù)組反推nums數(shù)組的過程,diff[i] += 3意味著給nums[i..]所有的元素都加了 3,然后diff[j+1] -= 3又意味著對(duì)于nums[j+1..]所有元素再減 3,那綜合起來,是不是就是對(duì)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)

結(jié)果:

[8, -3, 4, -3, -5]

[8, 5, 9, 6, 1]

[8, -3, 5, -3, -6]

[8, 5, 10, 7, 1]

不妨去試試力扣第 1109 題「航班預(yù)訂統(tǒng)計(jì)]。

labuladong的算法小抄

總結(jié)

以上是生活随笔為你收集整理的python刷题总结_【python刷题】差分数组的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。