1413. 逐步求和得到正数的最小值『简单』

题目来源于力扣(LeetCode

一、题目

1413. 逐步求和得到正数的最小值

题目相关标签:数组

提示:

  • 1 <= nums.length <= 100
  • -100 <= nums[i] <= 100

二、解题思路

2.1 暴力法

  1. 从数字 1 到 Integer.MAX_VALUE 开始遍历

  2. 如果数字 1 能够对 nums 数组进行累加求和的操作,且累加和始终大于 0,则返回结果数字 1

  3. 否则数字 1 每次加 1 继续循环操作

2.2 遍历求和取最小值方式

  1. 遍历一遍 nums 数组,记录下累加和的最小值

  2. 最小值为正数时,说明 nums 数组中的累加和始终大于等于 1,则返回最小正数 1

  3. 最小值为负数时,则取最小值的绝对值,且需要加 1,才能保证该数对 nums 数组进行累加和时,结果始终大于等于 1

三、代码实现

3.1 暴力法

public static int minStartValue(int[] nums) {
    // 从正数 1 开始,对数组进行累加的操作
    for (int i = 1; i < Integer.MAX_VALUE; i++) {
        int sum = i;
        for (int j = 0; j < nums.length; j++) {
            sum += nums[j];
            // 累加和小于 1 时,结束内层循环
            if (sum < 1) {
                break;
            }
            // 内层循环,即遍历到 nums 的最后一位时,返回正确结果
            if (j == nums.length - 1) {
                return i;
            }
        }
    }
    return 0;
}

3.2 遍历求和取最小值方式

public static int minStartValue(int[] nums) {
    // 定义最小值
    int minSum = Integer.MAX_VALUE;
    // 初始累加和为 0
    int sum = 0;

    for (int num : nums) {
        // 累加求和的结果
        sum += num;
        // 记录下最小的和
        minSum = Math.min(minSum, sum);
    }
    // minSum 为正数时,返回最小正数 1
    if (minSum >= 0) {
        return 1;
    }
    // minSum 为负数时,返回 负数取反 + 1
    else {
        return 1 - minSum;
    }
}

四、执行用时

4.1 暴力法

4.2 遍历求和取最小值方式

五、部分测试用例

public static void main(String[] args) {
    int[] arr = {-3, 2, -3, 4, 2};  // output:5
//    int[] arr = {1, 2};  // output:1
//    int[] arr = {1, -2, -3};  // output:5
    int result = minStartValue(arr);
    System.out.println(result);
}
posted @ 2020-05-13 20:26  知音12138  阅读(195)  评论(0编辑  收藏  举报