Check if all elements of a Circular Array can be made equal by increments of adjacent pairs
Last Updated :
10 May, 2021
Given a circular array arr[] of size N, the task is to check if it is possible to make all array elements of the circular array equal by increasing pairs of adjacent elements by 1.
Examples:
Input: N = 4, arr[] = {2, 1, 3, 4}
Output:Yes
Explanation:
Step 1: {2, 1, 3, 4} -> {3, 2, 3, 4}
Step 2: {3, 2, 3, 4} -> {4, 3, 3, 4}
Step 3: {4, 3, 3, 4} -> {4, 4, 4, 4}
Input: N = 6, arr[]={1, 5, 9, 6, 1, 1}
Output: No
Approach: To solve the problem, it can be observed that the two indices consisting of elements to be incremented, one is even and the other one is odd. Therefore, if we increase the value of an even-indexed element, consequently an odd-indexed element will also be increased. Therefore, all the array elements can be made equal only if the sum of odd-indexed elements and even-indexed elements are equal. Follow the steps below to solve the problem:
- Calculate the sum of all even-indexed numbers, i.e sumEven.
- Calculate the sum of all odd-indexed numbers, i.e sumOdd.
- If sumEven and sumOdd are found to be equal, then print “Yes” else “No”.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
bool checkEquall( int arr[], int N)
{
int sumEven = 0, sumOdd = 0;
for ( int i = 0; i < N; i++) {
if (i & 1)
sumOdd += arr[i];
else
sumEven += arr[i];
}
if (sumEven == sumOdd)
return true ;
else
return false ;
}
int main()
{
int arr[] = { 2, 7, 3, 5, 7 };
int N = sizeof (arr) / sizeof (arr[0]);
if (checkEquall(arr, N))
cout << "YES" << endl;
else
cout << "NO" << endl;
return 0;
}
|
Java
import java.util.*;
class GFG{
static boolean checkEquall( int arr[], int N)
{
int sumEven = 0 , sumOdd = 0 ;
for ( int i = 0 ; i < N; i++)
{
if (i % 2 == 1 )
sumOdd += arr[i];
else
sumEven += arr[i];
}
if (sumEven == sumOdd)
return true ;
else
return false ;
}
public static void main(String[] args)
{
int arr[] = { 2 , 7 , 3 , 5 , 7 };
int N = arr.length;
if (checkEquall(arr, N))
System.out.print( "YES" + "\n" );
else
System.out.print( "NO" + "\n" );
}
}
|
Python3
def checkEquall(arr, N):
sumEven, sumOdd = 0 , 0
for i in range (N):
if (i & 1 ):
sumOdd + = arr[i]
else :
sumEven + = arr[i]
if (sumEven = = sumOdd):
return True
else :
return False
if __name__ = = "__main__" :
arr = [ 2 , 7 , 3 , 5 , 7 ]
N = len (arr)
if (checkEquall(arr, N)):
print ( "YES" )
else :
print ( "NO" )
|
C#
using System;
class GFG{
static bool checkEquall( int []arr, int N)
{
int sumEven = 0, sumOdd = 0;
for ( int i = 0; i < N; i++)
{
if (i % 2 == 1)
sumOdd += arr[i];
else
sumEven += arr[i];
}
if (sumEven == sumOdd)
return true ;
else
return false ;
}
public static void Main(String[] args)
{
int []arr = { 2, 7, 3, 5, 7 };
int N = arr.Length;
if (checkEquall(arr, N))
Console.Write( "YES" + "\n" );
else
Console.Write( "NO" + "\n" );
}
}
|
Javascript
<script>
function checkEquall(arr, N)
{
let sumEven = 0, sumOdd = 0;
for (let i = 0; i < N; i++)
{
if (i % 2 == 1)
sumOdd += arr[i];
else
sumEven += arr[i];
}
if (sumEven == sumOdd)
return true ;
else
return false ;
}
let arr = [ 2, 7, 3, 5, 7 ];
let N = arr.length;
if (checkEquall(arr, N))
document.write( "YES" );
else
document.write( "NO" );
</script>
|
Time Complexity: O(N)
Auxiliary Space: O(1)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...