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

136 阅读2分钟

image.png

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第15天,点击查看活动详情

测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。

怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~

一、题目描述:

  • 题目内容

    image.png

  • 题目示例

    image.png

  • 题目解析

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

二、思路分析:

我们读取本题题目,题目要求求出一个startValue值,依次加上nums数组中的值。那么startvalue值需要满足什么条件,我们继续获取题目细节点:

  • startvalue值是一个正数
  • startvalue作为nums数组累计和的开头值,且保证每一次累计和要大于等于1
  • startvalue返回必须是最小的那个值

通过上述要求,我们解答本题可以使用模拟贪心算法来解答即可,思路如下:

  • StartValue值与nums数组第一个数求和后,继续将求和的值与后续的nums元素进行累计和相加
  • 每一次累计和值都要满足大于等于1,因此这个过程是前缀和的简单应用
  • 初始化startvalue和累计和Sum值都赋值为0
  • 使用for循环遍历nums元素,每一次遍历的元素与Sum进行累计和计算
  • 新的Startvalue值取Sum与原来的StartValue值的最小哪一个 image.png 根据上述解题思路,我们能快速使用Python实现,代码如下:
    class Solution(object):
        def minStartValue(self, nums):
            """
            :type nums: List[int]
            :rtype: int
            """
            ans = 0
            Sum = 0
            for i,num in enumerate(nums):
                Sum +=num
                ans = min(ans,Sum)
            return -ans+1
    

三、总结:

本题考察前缀和的简单应用,根据累计和每一次大于等于1则遍历时候累计和取最小的那个即可,AC提交记录如下:

image.png

  • 时间复杂度:O(n),n为数组长度
  • 空间复杂度:O(1),只需要使用常用量即可

以上是本期内容,欢迎大佬们点赞评论,下期见~~~