题目链接: 5607. 生成平衡数组的方案数
在参考了排名第二的同学(周赛的排名)的代码之后,很有心得,他的方法很巧妙,只用了一个数组就解决了这个问题。这个方法的关键在于用正负来区分奇数index和偶数index,如果遇到了奇数index的项就在前面的结果上减去这个数字,如果遇到了偶数index的项,就在前面的结果上加上这个数字。arr[i]表示0~i-1项中偶数index项减去奇数index项的结果。
在最后一个循环删除第i项的时候,arr[n]-arr[i+1]表示后面的项改变了奇偶系数的结果。
var waysToMakeFair = function(nums) {
let n = nums.length;
let arr = new Array(n+1).fill(0);
for(let i=0;i<n;i++){
arr[i+1] = arr[i] + ((i%2==0)?nums[i]:-nums[i]);
}
let res=0;
for(let i=0;i<n;i++){
if(arr[i]-(arr[n]-arr[i+1])==0){
res++;
}
}
return res;
};