#周赛 #Leetcode #差分
题解
考虑nums[0]>0,则必须对0 - k-1下标的元素减去nums[0],然后再处理nums[1]。
子数组同时加/减一个数 -> 差分数组
public boolean checkArray(int[] nums, int k) {
int n = nums.length;
var d = new int[n+1];
//d为差分数组,将nums[0] 到 nums[i+k-1] 的元素减1,等价于把d[i]减1,d[i+k]加1
//注意子数组的长度必须为k,所以i <= n-k
d[0] = nums[0];
for (int i = 1; i < n; i++) {
d[i] = nums[i] - nums[i-1];
}
for (int i = 0; i + k <= n; i++) {
d[i + k] += d[i];
d[i] = 0;
}
for (int i = 0; i < n; i++) {
if (d[i] != 0) return false;
}
return true;
}