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
Solution: Prefix sum
Find the minimum prefix sum, ans = – min(prefix_sum, 0) + 1
Time complexity: O(n)
Space complexity: O(1)
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// Author: Huahua class Solution { public: int minStartValue(vector<int>& nums) { int min_sum = 0; int sum = 0; for (int num : nums) { sum += num; min_sum = min(min_sum, sum); } return -min_sum + 1; } }; |
请尊重作者的劳动成果,转载请注明出处!花花保留对文章/视频的所有权利。
如果您喜欢这篇文章/视频,欢迎您捐赠花花。
If you like my articles / videos, donations are welcome.
Be First to Comment