Input: nums =[-3,2,-3,4,2]Output: 5Explanation: If you choose startValue =4,in the third iteration your step by step sum is less than 1.**step by step sum****startValue =4| startValue =5| nums**(4**-3**)=1|(5**-3**)=2|-3(1**+2**)=3|(2**+2**)=4|2(3**-3**)=0|(4**-3**)=1|-3(0**+4**)=4|(1**+4**)=5|4(4**+2**)=6|(5**+2**)=7|2
To keep the running sum always positive, we need to ensure that the minimum prefix sum (including the start value) is at least 1. By tracking the lowest prefix sum, we can compute the minimum start value needed.
classSolution {
public:int minStartValue(vector<int>& nums) {
int sum =0, min_sum =0;
for (int x : nums) {
sum += x;
min_sum = min(min_sum, sum);
}
return1- min_sum;
}
};
1
2
3
4
5
6
7
8
9
10
funcMinStartValue(nums []int) int {
sum, minSum:=0, 0for_, x:=rangenums {
sum+=xifsum < minSum {
minSum = sum }
}
return1-minSum}
1
2
3
4
5
6
7
8
9
10
classSolution {
publicintminStartValue(int[] nums) {
int sum = 0, minSum = 0;
for (int x : nums) {
sum += x;
minSum = Math.min(minSum, sum);
}
return 1 - minSum;
}
}
1
2
3
4
5
6
7
8
9
10
11
classSolution {
funminStartValue(nums: IntArray): Int {
var sum = 0var minSum = 0for (x in nums) {
sum += x
minSum = minOf(minSum, sum)
}
return1 - minSum
}
}
1
2
3
4
5
6
7
8
9
from typing import List
classSolution:
defminStartValue(self, nums: List[int]) -> int:
total =0 min_sum =0for x in nums:
total += x
min_sum = min(min_sum, total)
return1- min_sum
1
2
3
4
5
6
7
8
9
10
11
impl Solution {
pubfnmin_start_value(nums: Vec<i32>) -> i32 {
letmut sum =0;
letmut min_sum =0;
for x in nums {
sum += x;
min_sum = min_sum.min(sum);
}
1- min_sum
}
}