b_lc_生成平衡数组的方案数(奇偶前缀和)

给一n个元素的数组A,求出删除一位元素使得整个数组的奇数下标和与偶数下标和相等的方案数。

思路:一开始想用前、后缀做,不过那样会更麻烦,导致我浪费了许多时间,直接求一个前缀和方便多了

const int N=1e5+5;
class Solution {
public:
    int os[N], es[N];
    int waysToMakeFair(vector<int>& A) {
        int n=A.size(), ans=0;
        A.insert(A.begin(), 0);
        for (int i=1; i<=n; i++) {
            if (i&1) {
                os[i]=os[i-1]+A[i];
                es[i]=es[i-1];
            } else {
                es[i]=es[i-1]+A[i];
                os[i]=os[i-1];
            }
        }
        for (int i=1; i<=n; i++) {
            int o=os[i]+es[n]-es[i-1]; //删除一位之后,下标奇数变偶数,偶数变奇数
            int e=es[i]+os[n]-os[i-1];
            if (o==e) ans++;
        }
        return ans;
    }
};
posted @ 2020-11-22 11:41  童年の波鞋  阅读(106)  评论(0编辑  收藏  举报