1664. 生成平衡数组的方案数
思路:删掉第i个元素后,i后面的元素的奇偶性都翻转了。
1,先计算出奇数和偶数的前缀和sum1、sum2
2,然后for循环,遍历要删除的点i,同时保存遍历过的点的值,p1是奇数的和,p2是偶数的和。删掉i这个点后,后面的奇数都变偶数,偶数变奇数。
3,如果i是奇数,那就是判断(p1+(sum2-p2)) == (p2+(sum1-p1-nums[i]))
4,如果i是偶数,那就是判断(p1+(sum2-p2-nums[i])) == (p2+(sum1-p1))
class Solution {
public:
int waysToMakeFair(vector<int>& nums) {
int n=nums.size();
int sum1=0,sum2=0;
for(int i=0;i<nums.size();i++){
if(i%2) sum1+=nums[i];
else sum2+=nums[i];
}
int p1=0,p2=0;
int ct=0;
for(int i=0;i<nums.size();i++){
if(i%2){
if((p1+(sum2-p2))==(p2+(sum1-p1-nums[i]))) ct++;
}else{
if((p1+(sum2-p2-nums[i]))==(p2+(sum1-p1))) ct++;
}
if(i%2) p1+=nums[i];
else p2+=nums[i];
}
return ct;
}
};