Ways to Make a Fair Array

medium prefix sum parity

Problem

You are given an integer array nums and must delete exactly one element. After the deletion the remaining values close ranks and are re-indexed from 0. The result is called fair when the sum of the values sitting at even indices equals the sum of the values sitting at odd indices. Count how many choices of the deleted index leave a fair array.

Inputnums = [2, 1, 6, 4]
Output1
Only deleting index 1 works: [2, 6, 4] has even-index sum 2 + 4 = 6 and odd-index sum 6. Every other deletion leaves unequal sums.

def ways_to_make_fair(nums):
    right_even = sum(nums[0::2])
    right_odd = sum(nums[1::2])
    left_even = left_odd = 0
    count = 0
    for i, v in enumerate(nums):
        if i % 2 == 0:
            right_even -= v
        else:
            right_odd -= v
        if left_even + right_odd == left_odd + right_even:
            count += 1
        if i % 2 == 0:
            left_even += v
        else:
            left_odd += v
    return count
function waysToMakeFair(nums) {
  let rightEven = 0, rightOdd = 0;
  for (let i = 0; i < nums.length; i++) {
    if (i % 2 === 0) rightEven += nums[i];
    else rightOdd += nums[i];
  }
  let leftEven = 0, leftOdd = 0, count = 0;
  for (let i = 0; i < nums.length; i++) {
    if (i % 2 === 0) rightEven -= nums[i];
    else rightOdd -= nums[i];
    if (leftEven + rightOdd === leftOdd + rightEven) count++;
    if (i % 2 === 0) leftEven += nums[i];
    else leftOdd += nums[i];
  }
  return count;
}
int waysToMakeFair(int[] nums) {
    int rightEven = 0, rightOdd = 0;
    for (int i = 0; i < nums.length; i++) {
        if (i % 2 == 0) rightEven += nums[i];
        else rightOdd += nums[i];
    }
    int leftEven = 0, leftOdd = 0, count = 0;
    for (int i = 0; i < nums.length; i++) {
        if (i % 2 == 0) rightEven -= nums[i];
        else rightOdd -= nums[i];
        if (leftEven + rightOdd == leftOdd + rightEven) count++;
        if (i % 2 == 0) leftEven += nums[i];
        else leftOdd += nums[i];
    }
    return count;
}
int waysToMakeFair(vector<int>& nums) {
    int rightEven = 0, rightOdd = 0;
    for (int i = 0; i < (int)nums.size(); i++) {
        if (i % 2 == 0) rightEven += nums[i];
        else rightOdd += nums[i];
    }
    int leftEven = 0, leftOdd = 0, count = 0;
    for (int i = 0; i < (int)nums.size(); i++) {
        if (i % 2 == 0) rightEven -= nums[i];
        else rightOdd -= nums[i];
        if (leftEven + rightOdd == leftOdd + rightEven) count++;
        if (i % 2 == 0) leftEven += nums[i];
        else leftOdd += nums[i];
    }
    return count;
}
Time: O(n) Space: O(1)