2772.使数组中的所有元素都等零 妙用差分!
2772.使数组中的所有元素都等零
- 这题涉及这个区间修改,当然啦,通用的方法肯定是使用
线段树
进行求解,但是我们可以注意到,这个区间修改是有方向性+固定大小
,所以我们可以使用差分数组
进行求解
差分方法
- 我们需要
一边差分,一边就要计算出当前位置是否可以变为0
,如果不可以,直接返回False
,否则累积计算这个差分前缀和
class Solution:def checkArray(self, nums: List[int], k: int) -> bool:n = len(nums)d = [0] * (n + 1) # 差分数组,初始全零sum_d = 0 # 当前差分数组的前缀和for i, x in enumerate(nums):sum_d += d[i] # 计算当前差分前缀和x += sum_d # 当前 nums[i] 的实际值(原始值加上差分的影响)if x == 0: continue # 无需操作if x < 0 or i + k > n: return False # 无法操作sum_d -= x # 相当于在差分数组中 d[i] -= xd[i + k] += x # 相当于在差分数组中 d[i+k] += xreturn True