【題目】1413. 逐步求和得到正數的最小值
給你一個整數數組 nums 。你可以選定任意的 正數 startValue 作爲初始值。
你需要從左到右遍歷 nums 數組,並將 startValue 依次累加上 nums 數組中的值。
請你在確保累加和始終大於等於 1 的前提下,選出一個最小的 正數 作爲 startValue 。
示例 1:
輸入:nums = [-3,2,-3,4,2]
輸出:5
解釋:如果你選擇 startValue = 4,在第三次累加時,和小於 1 。
累加求和
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
示例 2:
輸入:nums = [1,2]
輸出:1
解釋:最小的 startValue 需要是正數。
示例 3:
輸入:nums = [1,-2,-3]
輸出:5
提示:
1 <= nums.length <= 100
-100 <= nums[i] <= 100
【解題思路1】
如示例 1:
輸入:nums = [-3,2,-3,4,2]
輸出:5
其實只要每一步 startValue 都大於當前的累加和就可以了,求出每一步累加值 |sum|,當前 startValue > |sum|,最後取最大值
當前累加和sum 當前需要的最小startValue
-3 >|-3|, 4
-3+2=-1 >|-1|, 1
-1-3=-4 >|-4|, 5
-4+4=0 >|0|, 1
0+2=2 >|2|, 3
所以startValue雖小是5
class Solution {
public int minStartValue(int[] nums) {
int sum = 0;
int startValue = 1;
for(int num : nums){
sum += num;
if(sum <= 0){
startValue = Math.max(startValue, Math.abs(sum) + 1);
}
}
return startValue;
}
}