等于所有后续元素之和的元素的索引
给定一个包含N个正整数的数组arr[] 。任务是找到等于所有后续元素之和的元素的索引。如果不存在这样的元素,则打印-1 。
例子:
Input: arr[] = { 36, 2, 17, 6, 6, 5 }
Output: 0 2
arr[0] = arr[1] + arr[2] + arr[3] + arr[4] + arr[5]
arr[2] = arr[3] + arr[4] + arr[5]
Input: arr[] = {7, 25, 17, 7}
Output: -1
方法:在从最后一个索引遍历给定数组arr[]时,维护一个sum变量,该变量存储到目前为止遍历的元素的总和。将总和与当前元素arr[i]进行比较。如果相等,则将该元素的索引推入答案向量。如果最后答案向量的大小为 0,则打印-1 ,否则打印其内容。
下面是上述方法的实现:
C++
// C++ implementation of the approach
#include
using namespace std;
// Function to find the valid indices
void find_idx(int arr[], int n)
{
// Vector to store the indices
vector answer;
// Initialise sum with 0
int sum = 0;
// Starting from the last element
for (int i = n - 1; i >= 0; i--) {
// If sum till now is equal to
// the current element
if (sum == arr[i]) {
answer.push_back(i);
}
// Add current element to the sum
sum += arr[i];
}
if (answer.size() == 0) {
cout << "-1";
return;
}
for (int i = answer.size() - 1; i >= 0; i--)
cout << answer[i] << " ";
}
// Driver code
int main()
{
int arr[] = { 36, 2, 17, 6, 6, 5 };
int n = sizeof(arr) / sizeof(int);
find_idx(arr, n);
return 0;
}
Java
// Java implementation of the approach
import java.util.*;
class GFG
{
// Function to find the valid indices
static void find_idx(int arr[], int n)
{
// Vector to store the indices
Vector answer = new Vector();
// Initialise sum with 0
int sum = 0;
// Starting from the last element
for (int i = n - 1; i >= 0; i--)
{
// If sum till now is equal to
// the current element
if (sum == arr[i])
{
answer.add(i);
}
// Add current element to the sum
sum += arr[i];
}
if (answer.size() == 0)
{
System.out.println("-1");
return;
}
for (int i = answer.size() - 1; i >= 0; i--)
System.out.print(answer.get(i) + " ");
}
// Driver code
public static void main (String[] args)
{
int arr[] = { 36, 2, 17, 6, 6, 5 };
int n = arr.length;
find_idx(arr, n);
}
}
// This code is contributed by AnkitRai01
Python3
# Python3 implementation of the approach
# Function to find the valid indices
def find_idx(arr, n):
# List to store the indices
answer=[]
# Initialise sum with 0
_sum = 0
# Starting from the last element
for i in range(n - 1, -1, -1):
# If sum till now is equal to
# the current element
if (_sum == arr[i]) :
answer.append(i)
# Add current element to the sum
_sum += arr[i]
if (len(answer) == 0) :
print(-1)
return
for i in range(len(answer) - 1, -1, -1):
print(answer[i], end = " ")
# Driver code
arr = [ 36, 2, 17, 6, 6, 5 ]
n = len(arr)
find_idx(arr, n)
# This code is contributed by
# divyamohan123
C#
// C# implementation of the approach
using System;
using System.Collections.Generic;
class GFG
{
// Function to find the valid indices
static void find_idx(int[] arr, int n)
{
// List to store the indices
List answer = new List();
// Initialise sum with 0
int sum = 0;
// Starting from the last element
for (int i = n - 1; i >= 0; i--)
{
// If sum till now is equal to
// the current element
if (sum == arr[i])
{
answer.Add(i);
}
// Add current element to the sum
sum += arr[i];
}
if (answer.Count == 0)
{
Console.WriteLine("-1");
return;
}
for (int i = answer.Count - 1; i >= 0; i--)
Console.Write(answer[i] + " ");
}
// Driver code
public static void Main (String[] args)
{
int[] arr = { 36, 2, 17, 6, 6, 5 };
int n = arr.Length;
find_idx(arr, n);
}
}
// This code is contributed by Ashutosh450
Javascript
输出:
0 2