# Minimum value to be added to the prefix sums at each array indices to make them positive

• Difficulty Level : Easy
• Last Updated : 22 Apr, 2021

Given an array arr[] consisting of N of integers, the task is to find the minimum positive value S that needs to be added such that the prefix sum at each index of the given array after adding S is always positive.

Examples:

Input: arr[] = {-3, 2, -3, 4, 2}
Output: 5
Explanation:
For S = 5, prefix sums at each array indices are as follows:
At index 1: (5 – 3) = 2
At index 2: (2 + 2) = 4
At index 3: (4 – 3) = 1
At index 4: (1 + 4) = 5
At index 5: (5 + 2) = 7
Since all the prefix sums obtained is greater than 0, the required answer is 5.

Input: arr[] = {1, 2}
Output: 1

Naive Approach: The simplest approach is to iterate over all possible values of S starting from 1, and add S to the prefix sum at each array indices and check if it is greater than 0 or not. Print that value of S for which all the prefix sums are found to be positive.

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

Efficient Approach: To optimize the above approach, follow the steps below:

• Initialize a variable minValue with 0 to store the minimum prefix sum.
• Initialize a variable sum to store the prefix sum at every index.
• Traverse the array arr[] over range [0, N – 1] using the variable i.
• Update the sum and add arr[i] to the sum.
• If sum is less than minValue, set minValue as sum.
• Initialize a variable startValue to store the desired result and set startValue equal to (1 – minValue).
• After the above steps, print the value of startValue as minimum possible value of S.

Below is the implementation of the above approach:

## C++

 `// C++ program for the above approach``#include ``using` `namespace` `std;` `// Function to find minimum startValue``// for positive prefix sum at each index``int` `minStartValue(vector<``int``>& nums)``{``    ``// Store the minimum prefix sum``    ``int` `minValue = 0;` `    ``// Stores prefix sum at each index``    ``int` `sum = 0;` `    ``// Traverse over the array``    ``for` `(``auto` `n : nums) {` `        ``// Update the prefix sum``        ``sum += n;` `        ``// Update the minValue``        ``minValue = min(minValue, sum);``    ``}` `    ``int` `startValue = 1 - minValue;` `    ``// Return the positive start value``    ``return` `startValue;``}` `// Driver Code``int` `main()``{``    ``vector<``int``> nums = { -3, 2, -3, 4, 2 };` `    ``// Function Call``    ``cout << minStartValue(nums);` `    ``return` `0;``}`

## Java

 `// Java program for the``// above approach``import` `java.util.*;` `class` `GFG{` `// Function to find minimum startValue``// for positive prefix sum at each index``static` `int` `minStartValue(``int``[] nums)``{``    ` `    ``// Store the minimum prefix sum``    ``int` `minValue = ``0``;`` ` `    ``// Stores prefix sum at each index``    ``int` `sum = ``0``;``    ` `    ``// Traverse over the array``    ``for``(``int` `n : nums)``    ``{``        ` `        ``// Update the prefix sum``        ``sum += n;``        ` `        ``// Update the minValue``        ``minValue = Math.min(minValue, sum);``    ``}``    ` `    ``int` `startValue = ``1` `- minValue;``    ` `    ``// Return the positive start value``    ``return` `startValue;``}`` ` `// Driver Code``public` `static` `void` `main(String[] args)``{``    ``int``[] nums = { -``3``, ``2``, -``3``, ``4``, ``2` `};`` ` `    ``// Function Call``    ``System.out.println(minStartValue(nums));``}``}` `// This code is contributed by susmitakundugoaldanga`

## Python3

 `# Python3 program for the``# above approach` `# Function to find minimum startValue``# for positive prefix sum at each index``def` `minStartValue(nums):``  ` `    ``# Store the minimum prefix sum``    ``minValue ``=` `0` `    ``# Stores prefix sum at each index``    ``sum` `=` `0` `    ``# Traverse over the array``    ``for` `i ``in` `range``(``len``(nums)):``      ` `        ``# Update the prefix sum``        ``sum` `+``=` `nums[i]` `        ``# Update the minValue``        ``minValue ``=` `min``(minValue, ``sum``)` `    ``startValue ``=` `1` `-` `minValue``    ` `    ``# Return the positive start value``    ``return` `startValue` `# Driver Code``if` `__name__ ``=``=` `'__main__'``:``  ` `    ``nums ``=` `[ ``-``3``, ``2``, ``-``3``, ``4``, ``2` `]``    ` `    ``# Function Call``    ``print``(minStartValue(nums))` `# This code is contributed by Princi Singh`

## C#

 `// C# program for the above approach``using` `System;`` ` `class` `GFG{``  ` `// Function to find minimum startValue``// for positive prefix sum at each index``static` `int` `minStartValue(``int``[] nums)``{``     ` `    ``// Store the minimum prefix sum``    ``int` `minValue = 0;``  ` `    ``// Stores prefix sum at each index``    ``int` `sum = 0;``     ` `    ``// Traverse over the array``    ``foreach``(``int` `n ``in` `nums)``    ``{``         ` `        ``// Update the prefix sum``        ``sum += n;``         ` `        ``// Update the minValue``        ``minValue = Math.Min(minValue, sum);``    ``}``     ` `    ``int` `startValue = 1 - minValue;``     ` `    ``// Return the positive start value``    ``return` `startValue;``}``  ` `// Driver Code``public` `static` `void` `Main()``{``    ``int``[] nums = { -3, 2, -3, 4, 2 };``  ` `    ``// Function Call``    ``Console.WriteLine(minStartValue(nums));``}``}` `// This code is contributed by code_hunt`

## Javascript

 ``

Output:

`5`

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

My Personal Notes arrow_drop_up