leetcode第353场周赛 4 - 差分数组维护区间修改

发布时间 2023-07-31 00:22:16作者: Qiansui

题目传送门

2772. 使数组中的所有元素都等于零

题意
给你一个数组,你可以进行任意次操作:选择 k 个数组里连续的数均减去 1,问最后能否得到一个全 0 数组?

思路
从前往后考虑问题,第一个数字如果不是 0,那么它必须进行 a[0] 次操作使自己变成 0。那么第一个处理完了,是不是考虑第二个了?那第二个不是一样的考虑策略吗?
所以我们从前往后处理问题,

代码

class Solution {
public:
	//从前往后考虑问题
	bool checkArray(vector<int>& a, int k) {
		int n = a.size();
		vector<int> d(n + 1, 0);
		long long sum = 0, x = 0;
		for(int i = 0; i < n; ++ i){
			sum += d[i];
			x = a[i] + sum;
			if(x == 0) continue;
			if(i + k > n || x < 0) return false;
			d[i + k] += x;
			sum -= x;
		}
		return true;
	}
};