Related Articles

# 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)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

My Personal Notes arrow_drop_up