Given an array Arr[] of N of positive integers. The task is to find positions of all the elements which are equal to the sum of all preceding elements. If no such element exists print -1.
Examples:
Input : Arr[] = {1, 2, 3, 6, 3, 15, 5}
Output :3 4 6
Here, the element at index “3” i.e. 3 is equal to the sum of preceding elements (1 + 2).
Similarly, at index 4, 6 = 1+2+3 (sum of all preceding elements).
And element at index 6 i.e. 15 = 1 + 2 + 3 + 6 + 3.
Input: Arr[] = {7, 5, 17, 25}
Output: -1
Approach:
While traversing the array Arr[], maintain a sum variable that store the sum of elements till i – 1. Compare the sum with current element Arr[i]. If it is equal, push the index of this element into the answer vector.
Below is the implementation of the above approach:
C++
// C++ implementation #include <bits/stdc++.h> using namespace std; // function to return valid indexes vector< int > find_idx( int ar[], int n) { // Vector to store the answer vector< int > answer; // Initial sum would always // be first element int sum = ar[0]; for ( int i = 1; i < n; i++) { // Check if sum till now // is equal to current element if (sum == ar[i]) { answer.push_back(i + 1); } // Updating the sum by // adding the current // element in each // iteration. sum += ar[i]; } return answer; } // Driver code int main() { int ar[] = { 1, 2, 3, 6, 3, 15, 5 }; int n = sizeof (ar) / sizeof ( int ); vector< int > ans = find_idx(ar, n); if (ans.size() != 0) { for ( int i : ans) { cout << i << " " ; } } else { cout << "-1" ; } cout << endl; return 0; } |
Java
// Java implementation of the approach import java.util.*; class GFG { // function to return valid indexes static Vector<Integer> find_idx( int ar[], int n) { // Vector to store the answer Vector<Integer> answer = new Vector<Integer>(); // Initial sum would always // be first element int sum = ar[ 0 ]; for ( int i = 1 ; i < n; i++) { // Check if sum till now // is equal to current element if (sum == ar[i]) { answer.add(i + 1 ); } // Updating the sum by adding the // current element in each iteration. sum += ar[i]; } return answer; } // Driver code public static void main(String[] args) { int ar[] = { 1 , 2 , 3 , 6 , 3 , 15 , 5 }; int n = ar.length; Vector<Integer> ans = find_idx(ar, n); if (ans.size() != 0 ) { for ( int i : ans) { System.out.print(i + " " ); } } else { System.out.println( "-1" ); } } } // This code is contributed by 29AjayKumar |
Python3
# Python3 implementation of the above approach # function to return valid indexes def find_idx(ar, n) : # Vector to store the answer answer = []; # Initial sum would always # be first element sum = ar[ 0 ]; for i in range ( 1 , n) : # Check if sum till now # is equal to current element if ( sum = = ar[i]) : answer.append(i + 1 ); # Updating the sum by # adding the current # element in each # iteration. sum + = ar[i]; return answer; # Driver code if __name__ = = "__main__" : ar = [ 1 , 2 , 3 , 6 , 3 , 15 , 5 ]; n = len (ar); ans = find_idx(ar, n); if ( len (ans) ! = 0 ) : for i in ans : print (i, end = " " ); else : print ( "-1" ); print (); # This code is contributed by AnkitRai01 |
C#
// C# implementation of the approach using System; using System.Collections.Generic; class GFG { // function to return valid indexes static List< int > find_idx( int []ar, int n) { // Vector to store the answer List< int > answer = new List< int >(); // Initial sum would always // be first element int sum = ar[0]; for ( int i = 1; i < n; i++) { // Check if sum till now // is equal to current element if (sum == ar[i]) { answer.Add(i + 1); } // Updating the sum by adding the // current element in each iteration. sum += ar[i]; } return answer; } // Driver code public static void Main(String[] args) { int []ar = { 1, 2, 3, 6, 3, 15, 5 }; int n = ar.Length; List< int > ans = find_idx(ar, n); if (ans.Count != 0) { foreach ( int i in ans) { Console.Write(i + " " ); } } else { Console.WriteLine( "-1" ); } } } // This code is contributed by Princi Singh |
Javascript
<script> // Javascript implementation // function to return valid indexes function find_idx(ar, n) { // Vector to store the answer let answer = []; // Initial sum would always // be first element let sum = ar[0]; for (let i = 1; i < n; i++) { // Check if sum till now // is equal to current element if (sum == ar[i]) { answer.push(i + 1); } // Updating the sum by // adding the current // element in each // iteration. sum += ar[i]; } return answer; } // Driver code let ar = [1, 2, 3, 6, 3, 15, 5]; let n = ar.length; let ans = find_idx(ar, n); if (ans.length != 0) { for (let i of ans) { document.write(i + " " ); } } else { document.write( "-1" ); } document.write( "<br>" ); // This code is contributed by gfgking. </script> |
3 4 6
Time Complexity: O(n)
Auxiliary Space: O(n)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!