# Index with Minimum sum of prefix and suffix sums in an Array

• Difficulty Level : Basic
• Last Updated : 06 Nov, 2021

Given an array of integers. The task is to find the index in the array at which the value of prefixSum(i) + suffixSum(i) is minimum.
Note

• PrefixSum(i) = The sum of first i numbers of the array.
• SuffixSum(i) = the sum of last N – i + 1 numbers of the array.
• 1-based indexing is considered for the array. That is an index of the first element in the array is 1. Examples:

```Input : arr[] = {3, 5, 1, 6, 6 }
Output : 3
Explanation:
Presum[] = {3, 8, 9, 15, 21}
Postsum[] = { 21, 18, 13, 12, 6}
Presum[] + Postsum[] = {24, 26, 22, 27, 27}
It is clear that the min value of sum of
prefix and suffix sum is 22 at index 3.

Input : arr[] = { 3, 2, 5, 7, 3 }
Output : 2```

Given that we need to minimize the value of PrefixSum[i] + SuffixSum[i]. That is sum of first elements and elements from end.
If observed carefully, it can be seen that:

PrefixSum[i] + SuffixSum[i] = Sum of all elements in array + arr[i](Element at i-th index)

Since sum of all elements of the array will be the same for every index, therefore the value of PrefixSum[i] + SuffixSum[i] will be minimum for the minimum value of arr[i]
Therefore, the task reduces to find only the index of the minimum element of the array.
Below is the implementation of the above approach:

## C++

 `// C++ program to find the index with``// minimum sum of prefix and suffix``// sums in an Array` `#include ``using` `namespace` `std;` `int` `indexMinSum(``int` `arr[], ``int` `n)``{``    ``// Initialization of the min value``    ``int` `min = arr;``    ``int` `index = 0;` `    ``// Find minimum element in the array``    ``for` `(``int` `i = 1; i < n; i++) {``        ``if` `(arr[i] < min) {` `            ``// store the index of the``            ``// current minimum element``            ``min = arr[i];``            ``index = i;``        ``}``    ``}` `    ``// return the index of min element``    ``// 1-based index``    ``return` `index + 1;``}` `// Driver Code``int` `main()``{``    ``int` `arr[] = { 6, 8, 2, 3, 5 };``    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr);``    ``cout << indexMinSum(arr, n);``    ``return` `0;``}`

## Java

 `// Java program to find the index with``// minimum sum of prefix and suffix``// sums in an Array` `import` `java.io.*;` `class` `GFG {` `static` `int` `indexMinSum(``int` `arr[], ``int` `n)``{``    ``// Initialization of the min value``    ``int` `min = arr[``0``];``    ``int` `index = ``0``;` `    ``// Find minimum element in the array``    ``for` `(``int` `i = ``1``; i < n; i++) {``        ``if` `(arr[i] < min) {` `            ``// store the index of the``            ``// current minimum element``            ``min = arr[i];``            ``index = i;``        ``}``    ``}` `    ``// return the index of min element``    ``// 1-based index``    ``return` `index + ``1``;``}` `// Driver Code``    ``public` `static` `void` `main (String[] args) {``    ``int` `arr[] = { ``6``, ``8``, ``2``, ``3``, ``5` `};``    ``int` `n =arr.length;``    ``System.out.println( indexMinSum(arr, n));``    ``}``}``// This code is contributed by inder_verma..`

## Python 3

 `# Python 3 program to find the index with``# minimum sum of prefix and suffix``# sums in an Array` `def` `indexMinSum(arr, n):` `    ``# Initialization of the min value``    ``min` `=` `arr[``0``]``    ``index ``=` `0` `    ``# Find minimum element in the array``    ``for` `i ``in` `range``(``1``, n) :``        ``if` `(arr[i] < ``min``) :` `            ``# store the index of the``            ``# current minimum element``            ``min` `=` `arr[i]``            ``index ``=` `i` `    ``# return the index of min element``    ``# 1-based index``    ``return` `index ``+` `1` `# Driver Code``if` `__name__ ``=``=` `"__main__"``:``    ` `    ``arr ``=` `[ ``6``, ``8``, ``2``, ``3``, ``5` `]``    ``n ``=` `len``(arr)``    ``print``(indexMinSum(arr, n))` `# This code is contributed by ita_c`

## C#

 `// C# program to find the index with``// minimum sum of prefix and suffix``// sums in an Array` `using` `System;``class` `GFG``{``    ``static` `int` `indexMinSum(``int` `[]arr, ``int` `n)``    ``{``        ``// Initialization of the min value``        ``int` `min = arr;``        ``int` `index = 0;``    ` `        ``// Find minimum element in the array``        ``for` `(``int` `i = 1; i < n; i++) {``            ``if` `(arr[i] < min) {``    ` `                ``// store the index of the``                ``// current minimum element``                ``min = arr[i];``                ``index = i;``            ``}``        ``}``    ` `        ``// return the index of min element``        ``// 1-based index``        ``return` `index + 1;``    ``}``    ` `    ` `    ``// Driver Code``    ``static` `void` `Main()``    ``{``        ``int` `[]arr = { 6, 8, 2, 3, 5 };``        ``int` `n =arr.Length;``        ``Console.WriteLine(indexMinSum(arr, n));``    ``}``    ``// This code is contributed by ANKITRAI1``}`

## PHP

 ``

## Javascript

 ``

Output:

`3`

Time Complexity: O(N)

Auxiliary Space: O(1)

My Personal Notes arrow_drop_up