Find the element whose multiplication with -1 makes array sum 0

• Last Updated : 12 Sep, 2022

Given an array of N integers. The task is to find the smallest index of an element such that when multiplied by -1 the sum of whole array becomes 0. If there is no such index return -1.

Examples:

```Input : arr[] = {1, 3, -5, 3, 4}
Output : 2

Input : arr[] = {5, 3, 6, -7, -4}
Output : -1```

Naive Approach: The simple solution will be to take each element, multiply it by -1 and check if the new sum is 0. This algorithm works in O(N2).

Efficient Approach: If we take S as our initial sum of the array and we multiply current element Ai by -1 then the new sum will become S – 2*Ai and this should be equal to 0. So when for the first time S = 2*Ai then the current index is our required and if no element satisfies the condition then our answer will be -1. The time complexity of this algorithm is O(N).

Implementation:

C++

 `// C++ program to find minimum index``// such that sum becomes 0 when the``// element is multiplied by -1` `#include ``using` `namespace` `std;` `// Function to find minimum index``// such that sum becomes 0 when the``// element is multiplied by -1``int` `minIndex(``int` `arr[], ``int` `n)``{``    ``// Find array sum``    ``int` `sum = 0;``    ``for` `(``int` `i = 0; i < n; i++)``        ``sum += arr[i];` `    ``// Find element with value equal to sum/2``    ``for` `(``int` `i = 0; i < n; i++) {` `        ``// when sum is equal to 2*element``        ``// then this is our required element``        ``if` `(2 * arr[i] == sum)``            ``return` `(i + 1);``    ``}` `    ``return` `-1;``}` `// Driver code``int` `main()``{``    ``int` `arr[] = { 1, 3, -5, 3, 4 };``    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr[0]);``    ``cout << minIndex(arr, n) << endl;``    ``return` `0;``}`

Java

 `// Java program to find minimum index``// such that sum becomes 0 when the``// element is multiplied by -1` `import` `java.io.*;` `class` `GFG {``   ` `// Function to find minimum index``// such that sum becomes 0 when the``// element is multiplied by -1`` ``static` `int` `minIndex(``int` `arr[], ``int` `n)``{``    ``// Find array sum``    ``int` `sum = ``0``;``    ``for` `(``int` `i = ``0``; i < n; i++)``        ``sum += arr[i];` `    ``// Find element with value equal to sum/2``    ``for` `(``int` `i = ``0``; i < n; i++) {` `        ``// when sum is equal to 2*element``        ``// then this is our required element``        ``if` `(``2` `* arr[i] == sum)``            ``return` `(i + ``1``);``    ``}` `    ``return` `-``1``;``}` `// Driver code`  `    ``public` `static` `void` `main (String[] args) {``            ``int` `[]arr = { ``1``, ``3``, -``5``, ``3``, ``4` `};``    ``int` `n =arr.length;``    ``System.out.print( minIndex(arr, n));``    ``}``}` `// This code is contributed by anuj_67..`

Python 3

 `# Python 3 program to find minimum index``# such that sum becomes 0 when the``# element is multiplied by -1` `# Function to find minimum index``# such that sum becomes 0 when the``# element is multiplied by -1``def` `minIndex(arr, n):` `    ``# Find array sum``    ``sum` `=` `0``    ``for` `i ``in` `range` `(``0``, n):``        ``sum` `+``=` `arr[i]` `    ``# Find element with value``    ``# equal to sum/2``    ``for` `i ``in` `range``(``0``, n):` `        ``# when sum is equal to 2*element``        ``# then this is our required element``        ``if` `(``2` `*` `arr[i] ``=``=` `sum``):``            ``return` `(i ``+` `1``)` `    ``return` `-``1` `# Driver code``arr ``=` `[ ``1``, ``3``, ``-``5``, ``3``, ``4` `];``n ``=` `len``(arr);``print``(minIndex(arr, n))` `# This code is contributed``# by Akanksha Rai`

C#

 `// C# program to find minimum index``// such that sum becomes 0 when the``// element is multiplied by -1`` ` `using` `System;`` ` `class` `GFG {``    ` `// Function to find minimum index``// such that sum becomes 0 when the``// element is multiplied by -1`` ``static` `int` `minIndex(``int``[] arr, ``int` `n)``{``    ``// Find array sum``    ``int` `sum = 0;``    ``for` `(``int` `i = 0; i < n; i++)``        ``sum += arr[i];`` ` `    ``// Find element with value equal to sum/2``    ``for` `(``int` `i = 0; i < n; i++) {`` ` `        ``// when sum is equal to 2*element``        ``// then this is our required element``        ``if` `(2 * arr[i] == sum)``            ``return` `(i + 1);``    ``}`` ` `    ``return` `-1;``}`` ` `// Driver code`` ` ` ` `    ``public` `static` `void` `Main () {``            ``int``[] arr = { 1, 3, -5, 3, 4 };``    ``int` `n =arr.Length;``    ``Console.Write( minIndex(arr, n));``    ``}``}`

PHP

 ``

Javascript

 ``

Output

`2`

Complexity Analysis:

• Time Complexity: O(N), where N represents the size of the given array.
• Auxiliary Space: O(1), no extra space is required, so it is a constant.

My Personal Notes arrow_drop_up