• LeetCode 每日一题——1413. 逐步求和得到正数的最小值


    1.题目描述

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

    给你一个整数数组 nums 。你可以选定任意的 正数 startValue 作为初始值。

    你需要从左到右遍历 nums 数组,并将 startValue 依次累加上 nums 数组中的值。

    请你在确保累加和始终大于等于 1 的前提下,选出一个最小的 正数 作为 startValue 。

    示例 1:

    输入:nums = [-3,2,-3,4,2]
    输出:5
    解释:如果你选择 startValue = 4,在第三次累加时,和小于 1 。
                    累加求和
    
    • 1
    • 2
    • 3
    • 4

    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 需要是正数。
    
    • 1
    • 2
    • 3

    示例 3:

    输入:nums = [1,-2,-3]
    输出:5
    
    • 1
    • 2

    2.解题思路与代码

    2.1 解题思路

    使用前缀和数组进行解答,由于需要一个正数使得每个前缀和大于等于 1 ,那么我们就可以在求前缀和的同时求出前缀和数组的最小值 min ,在拿到前缀和数组的最小值时,我们可以使用该最小值计算(1-min)得到题目要求的每一步求和大于等于 1 的数。这里有个边界条件,因为需要大于等于 1 的整数,所以如果得到的结果小于 1 时,就需要返回 1。

    2.2 代码

    class Solution {
        public int minStartValue(int[] nums) {
            int[] sum = new int[nums.length];
            sum[0] = nums[0];
            int min = sum[0];
            for (int i = 1; i < nums.length; i++) {
            sum[i] = sum[i - 1] + nums[i];
            min = Math.min(min, sum[i]);
            }
            return 1 - min <= 0 ? 1 : 1 - min;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    2.3 测试结果

    通过测试
    测试结果

    3.总结

    • 使用前缀和数组解答
  • 相关阅读:
    配置Super-VLAN下的DHCP服务器示例
    css吸顶特效(elementui vue3官网)
    【MongoDB】MongoDB 的介绍和使用
    idea提升编码效率的12种插件
    FPGA FIFO 读取模式
    数字化转型孕育而来的在线文档协同工具:Baklib知识库及帮助中心
    【Qt事件】
    STM32F407ZGT6移植AD7606
    【旅行商问题】基于遗传算法求解TSP问题(Matlab代码实现)
    web基础与http协议
  • 原文地址:https://blog.csdn.net/qq_38550836/article/details/126248949