Skip to content

Balance Array

Problem Description

Given an integer array A of size N. You need to count the number of special elements in the given array.

A element is special if removal of that element make the array balanced.

Array will be balanced if sum of even index element equal to sum of odd index element.

Problem Constraints

1 <= N <= 10^5
1 <= A[i] <= 10^9
1 <= N <= 10^5
1 <= A[i] <= 10^9

Input Format

First and only argument is an integer array A of size N.
First and only argument is an integer array A of size N.

Output Format

Return an integer denoting the count of special elements.
Return an integer denoting the count of special elements.

Example Input

Input 1:
A = [2, 1, 6, 4]

Input 2:
A = [5, 5, 2, 5, 8]
Input 1:
A = [2, 1, 6, 4]

Input 2:
A = [5, 5, 2, 5, 8]

Example Output

Output 1:
 1

Output 2:
 2
Output 1:
 1

Output 2:
 2

Example Explanation

Explanation 1:
 After deleting 1 from array : {2,6,4}
    (2+4) = (6)
 Hence 1 is the only special element, so count is 1

Explanation 2:
 If we delete A[0] or A[1] , array will be balanced
    (5+5) = (2+8)
 So A[0] and A[1] are special elements, so count is 2.
Explanation 1:
 After deleting 1 from array : {2,6,4}
    (2+4) = (6)
 Hence 1 is the only special element, so count is 1

Explanation 2:
 If we delete A[0] or A[1] , array will be balanced
    (5+5) = (2+8)
 So A[0] and A[1] are special elements, so count is 2.

Solution

swift
import Foundation

class Solution {
	func solve(_ A: inout [Int]) -> Int {
        //(odd,even)
        var left = [(Int,Int)](repeating:(0,0),count:A.count)
        var right = [(Int,Int)](repeating:(0,0),count:A.count)
        
        var odd = 0
        var even = 0
        for (i,v) in A.enumerated(){
            if i%2 > 0 {
                odd += v
            } else {
                even += v
            }
            left[i] = (odd,even)
        }
        
        odd = 0
        even = 0
        for i in (0..<A.count).reversed(){
            if i%2 > 0 {
                odd += A[i]
            } else {
                even += A[i]
            }
            right[i] = (odd,even)
        }
        
        var ret = 0
        for i in (0..<A.count) {
            var lo = 0
            var le = 0
            if (i-1) >= 0 {
                (lo,le) = left[i-1]
            }
            
            var ro = 0
            var re = 0
            if (i+1) < A.count {
                (ro,re) = right[i+1]
            }
            
            if (lo + re) == (le + ro) {
                ret += 1
            }
            
        }
        return ret
    
	}
}
import Foundation

class Solution {
	func solve(_ A: inout [Int]) -> Int {
        //(odd,even)
        var left = [(Int,Int)](repeating:(0,0),count:A.count)
        var right = [(Int,Int)](repeating:(0,0),count:A.count)
        
        var odd = 0
        var even = 0
        for (i,v) in A.enumerated(){
            if i%2 > 0 {
                odd += v
            } else {
                even += v
            }
            left[i] = (odd,even)
        }
        
        odd = 0
        even = 0
        for i in (0..<A.count).reversed(){
            if i%2 > 0 {
                odd += A[i]
            } else {
                even += A[i]
            }
            right[i] = (odd,even)
        }
        
        var ret = 0
        for i in (0..<A.count) {
            var lo = 0
            var le = 0
            if (i-1) >= 0 {
                (lo,le) = left[i-1]
            }
            
            var ro = 0
            var re = 0
            if (i+1) < A.count {
                (ro,re) = right[i+1]
            }
            
            if (lo + re) == (le + ro) {
                ret += 1
            }
            
        }
        return ret
    
	}
}

References