Description
Given an array of integers nums, you start with an initial positive value startValue.
In each iteration, you calculate the step by step sum of startValue plus elements in nums (from left to right).
Return the minimum positive value of startValue such that the step by step sum is never less than 1.
Example 1:
Input: nums = [-3,2,-3,4,2]
Output: 5
Explanation: 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
Example 2:
Input: nums = [1,2]
Output: 1
Explanation: Minimum start value should be positive.
Example 3:
Input: nums = [1,-2,-3]
Output: 5
Constraints:
- 1 <= nums.length <= 100
- -100 <= nums[i] <= 100
分析
题目的意思是:找出一个最小的初始值,使得与数组每一个数的和都不小于1,这道题如果发现规律就很好做了,在遍历的时候只要保证minVal与当前的数的和不小于1就行了,即:
minVal=max(1-t,minVal)
t为当前前k个数的和,如果t本身大于等于0,就不需要进行操作,小于0则需要按照上面的公式。
代码
class Solution:
def minStartValue(self, nums: List[int]) -> int:
minVal=1
t=0
for num in nums:
t+=num
if(t<0):
minVal=max(1-t,minVal)
return minVal