返回介绍

solution / 1400-1499 / 1413.Minimum Value to Get Positive Step by Step Sum / README

发布于 2024-06-17 01:03:19 字数 3552 浏览 0 评论 0 收藏 0

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

English Version

题目描述

给你一个整数数组 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

解法

方法一

class Solution:
  def minStartValue(self, nums: List[int]) -> int:
    s, t = 0, inf
    for num in nums:
      s += num
      t = min(t, s)
    return max(1, 1 - t)
class Solution {
  public int minStartValue(int[] nums) {
    int s = 0;
    int t = Integer.MAX_VALUE;
    for (int num : nums) {
      s += num;
      t = Math.min(t, s);
    }
    return Math.max(1, 1 - t);
  }
}
class Solution {
public:
  int minStartValue(vector<int>& nums) {
    int s = 0, t = INT_MAX;
    for (int num : nums) {
      s += num;
      t = min(t, s);
    }
    return max(1, 1 - t);
  }
};
func minStartValue(nums []int) int {
  s, t := 0, 10000
  for _, num := range nums {
    s += num
    if s < t {
      t = s
    }
  }
  if t < 0 {
    return 1 - t
  }
  return 1
}
function minStartValue(nums: number[]): number {
  let sum = 0;
  let min = Infinity;
  for (const num of nums) {
    sum += num;
    min = Math.min(min, sum);
  }
  return Math.max(1, 1 - min);
}
impl Solution {
  pub fn min_start_value(nums: Vec<i32>) -> i32 {
    let mut sum = 0;
    let mut min = i32::MAX;
    for num in nums.iter() {
      sum += num;
      min = min.min(sum);
    }
    (1).max(1 - min)
  }
}

方法二

class Solution:
  def minStartValue(self, nums: List[int]) -> int:
    s = list(accumulate(nums))
    return 1 if min(s) >= 0 else abs(min(s)) + 1

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文