给定一个数组,找到一个数res,将res作为前缀和的初始值,使得数组前缀和的每一项都大于等于1,输出最小的k。
数据范围:1 <= nums.length <= 100 -100 <= nums[i] <= 100思路:
求出前缀和的最小值s,如果s小于1,则res = abs(s) + 1,否则s = 1。
代码:import java.util.Arrays; class Solution { public int minStartValue(int[] nums) { int[] sums = new int[110]; int res = 1; for (int i = 1; i <= nums.length; i ++ ){ sums[i] = sums[i - 1] + nums[i - 1]; if (sums[i] < 0){ res = Math.max(res, Math.abs(sums[i]) + 1); } } return res; } } public class Main { public static void main(String[] args) { Solution solution = new Solution(); int[] nums = new int[]{1, -2, -3}; System.out.println(solution.minStartValue(nums)); } }时空复杂度分析:
-
时间复杂度 : O(n)
-
空间复杂度 : O(n),可简化为O(1)
[1413. 逐步求和得到正数的最小值 - 力扣(LeetCode)](