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;
}
};