# Check if every index i has an index j such that sum of elements in both directions are equal

• Last Updated : 19 Mar, 2022

Given a circular array of size N. The task is to check if, for every index i starting from 0 to N-1, there exists an index j which is not equal to i such that sum of all the numbers in the clockwise direction from i to j is equal to the sum of all numbers in the anticlockwise direction from i to j.
Examples:

Input: a[] = {1, 4, 1, 4}
Output: Yes
The circular array is 1->4->1->4.
for index 0, j will be 2, then sum of elements from index 0 to 2 in clockwise direction will be 1 + 4 + 1 = 6 and the sum of elements from index 0 to 2 in anticlockwise direction will be 1 + 4 + 1 = 6.
for index 1, j will be 3, then sum of elements from index 1 to 3 in clockwise direction will be 4 + 1 + 4 = 9 and the sum of elements from index 1 to 3 in anticlockwise direction will be 4 + 1 + 4 = 9.
for index 2, j will be 0, then sum of elements from index 2 to 0 in clockwise direction will be 1 + 4 + 1 = 6 and the sum of elements from index 2 to 0 in anticlockwise direction will be 1 + 4 + 1 = 6
for index 3, j will be 1, then sum of elements from index 3 to 1 in clockwise direction will be 4 + 1 + 4 = 9 and the sum of elements from index 3 to 1 in anticlockwise direction will be 4 + 1 + 4 = 9
Input: a[] = {1, 1, 1, 1, 1, 1}
Output: Yes

Approach:

• When N is odd, the answer will be “NO” always as it is not possible to find an index j for every index i.
• If N is even, then check if the opposite element is exactly same for every index i, then the answer is “YES”.
• If the any of the index’s opposite element i.e., a[(i+(n/2))] is not equal to a[i], then the answer will be “NO”.

Below is the implementation of above approach:

## C++

 `// C++ program to check if the` `// number lies in given range` `#include ` `using` `namespace` `std;`   `// Function that returns the maximum element.` `bool` `check(``int` `a[], ``int` `n)` `{`   `    ``// check for odd` `    ``if` `(n % 2 == 1)` `        ``return` `false``;`   `    ``// check if the opposite element is same` `    ``// as a[i]` `    ``for` `(``int` `i = 0; i < n / 2; i++) {` `        ``if` `(a[i] != a[i + (n / 2)])` `            ``return` `false``;` `    ``}`   `    ``return` `true``;` `}`   `// Driver code` `int` `main()` `{` `    ``int` `a[] = { 1, 4, 1, 4 };`   `    ``int` `n = ``sizeof``(a) / ``sizeof``(a);`   `    ``if` `(check(a, n))` `        ``cout << ``"YES"``;` `    ``else` `        ``cout << ``"NO"``;`   `    ``return` `0;` `}`

## Java

 `//Java program to check if the` `//number lies in given range`   `public` `class` `GFG {`   `    ``//Function that returns the maximum element.` `    ``static` `boolean` `check(``int` `a[], ``int` `n)` `    ``{`   `     ``// check for odd` `     ``if` `(n % ``2` `== ``1``)` `         ``return` `false``;`   `     ``// check if the opposite element is same` `     ``// as a[i]` `     ``for` `(``int` `i = ``0``; i < n / ``2``; i++) {` `         ``if` `(a[i] != a[i + (n / ``2``)])` `             ``return` `false``;` `     ``}`   `     ``return` `true``;` `    ``}`   `    ``//Driver code` `    ``public` `static` `void` `main(String[] args) {` `        `  `        ``int` `a[] = { ``1``, ``4``, ``1``, ``4` `};`   `         ``int` `n = a.length;`   `         ``if` `(check(a, n))` `             ``System.out.println(``"YES"``);` `         ``else` `             ``System.out.println(``"NO"``);` `    ``}` `}`

## Python 3

 `# Python 3 Program  to check if the ` `# number lies in given range `   `# Function that returns the maximum element.` `def` `check(a, n) :`   `    ``# check for odd ` `    ``if` `n ``%` `2` `=``=` `1``:` `        ``return` `False`   `    ``# check if the opposite element is same ` `    ``# as a[i] ` `    ``for` `i ``in` `range``(n``/``/``2``) :` `        ``if` `a[i] !``=` `a[i ``+` `(n``/``/``2``)]:` `            ``return` `False`   `    ``return` `True`   `# Driver Code` `if` `__name__ ``=``=` `"__main__"` `:` `    ``a ``=` `[ ``1``, ``4``, ``1``, ``4``]`   `    ``n ``=` `len``(a)`   `    ``if` `check(a, n) :` `        ``print``(``"YES"``)` `    ``else` `:` `        ``print``(``"NO"``)` `    `  `# This code is contributed by ANKITRAI1`

## C#

 `// C# program to check if the` `// number lies in given range`   `class` `GFG ` `{`   `// Function that returns the` `// maximum element.` `static` `bool` `check(``int``[] a, ``int` `n)` `{`   `// check for odd` `if` `(n % 2 == 1)` `    ``return` `false``;`   `// check if the opposite` `// element is same as a[i]` `for` `(``int` `i = 0; i < (``int``)n / 2; i++) ` `{` `    ``if` `(a[i] != a[i + (``int``)(n / 2)])` `        ``return` `false``;` `}`   `return` `true``;` `}`   `// Driver code` `public` `static` `void` `Main()` `{` `    ``int``[] a = ``new` `int``[]{ 1, 4, 1, 4 };`   `    ``int` `n = a.Length;`   `    ``if` `(check(a, n))` `        ``System.Console.WriteLine(``"YES"``);` `    ``else` `        ``System.Console.WriteLine(``"NO"``);` `}` `}`   `// This code is contributed by mits`

## PHP

 `

## Javascript

 ``

Output:

`YES`

Time Complexity: O(n)
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up
Recommended Articles
Page :