当前位置: 首页 > news >正文

前缀和题目:逐步求和得到正数的最小值

文章目录

  • 题目
    • 标题和出处
    • 难度
    • 题目描述
      • 要求
      • 示例
      • 数据范围
  • 解法
    • 思路和算法
    • 代码
    • 复杂度分析

题目

标题和出处

标题:逐步求和得到正数的最小值

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

难度

2 级

题目描述

要求

给定一个整数数组 nums \texttt{nums} nums,选定一个正数 startValue \texttt{startValue} startValue 作为初始值。

每一轮,将 startValue \texttt{startValue} startValue 与数组 nums \texttt{nums} nums 中的元素(从左到右)累加求和。

返回最小的正数 startValue \texttt{startValue} startValue,使得累加和总是大于等于 1 \texttt{1} 1

示例

示例 1:

输入: nums = [-3,2,-3,4,2] \texttt{nums = [-3,2,-3,4,2]} nums = [-3,2,-3,4,2]
输出: 5 \texttt{5} 5
解释:如果选择 startValue = 4 \texttt{startValue = 4} startValue = 4,在第三次累加时,和小于 1 \texttt{1} 1
选择 startValue = 4 \texttt{startValue = 4} startValue = 4 对应的每次累加和依次是: [1,3,0,4,6] \texttt{[1,3,0,4,6]} [1,3,0,4,6]
选择 startValue = 5 \texttt{startValue = 5} startValue = 5 对应的每次累加和依次是: [2,4,1,5,7] \texttt{[2,4,1,5,7]} [2,4,1,5,7]

示例 2:

输入: nums = [1,2] \texttt{nums = [1,2]} nums = [1,2]
输出: 1 \texttt{1} 1
解释:最小的 startValue \texttt{startValue} startValue 是正数。

示例 3:

输入: nums = [1,-2,-3] \texttt{nums = [1,-2,-3]} nums = [1,-2,-3]
输出: 5 \texttt{5} 5

数据范围

  • 1 ≤ nums.length ≤ 100 \texttt{1} \le \texttt{nums.length} \le \texttt{100} 1nums.length100
  • -100 ≤ nums[i] ≤ 100 \texttt{-100} \le \texttt{nums[i]} \le \texttt{100} -100nums[i]100

解法

思路和算法

由于 startValue \textit{startValue} startValue 是正整数,因此其最小值是 1 1 1,将 startValue \textit{startValue} startValue 初始化为 1 1 1

每个元素的累加和等于 startValue \textit{startValue} startValue 加上数组中从首个元素到该元素的所有元素的前缀和,因此从左到右遍历数组,遍历过程中依次计算每个元素的前缀和,并确保累加和总是不小于 1 1 1

sum \textit{sum} sum 表示前缀和,从左到右遍历数组的过程中,依次将每个元素加到 sum \textit{sum} sum,则累加和是 startValue + sum \textit{startValue} + \textit{sum} startValue+sum。为了确保累加和总是不小于 1 1 1,需要确保对于每个元素都满足 startValue + sum ≥ 1 \textit{startValue} + \textit{sum} \ge 1 startValue+sum1,因此需要满足 startValue ≥ − sum + 1 \textit{startValue} \ge -\textit{sum} + 1 startValuesum+1。每次更新 sum \textit{sum} sum 的值之后,如果 startValue < − sum + 1 \textit{startValue} < -\textit{sum} + 1 startValue<sum+1,则将 startValue \textit{startValue} startValue 的值更新为 − sum + 1 -\textit{sum} + 1 sum+1。遍历结束后, startValue \textit{startValue} startValue 即为确保累加和总是不小于 1 1 1 的最小值。

由于 startValue \textit{startValue} startValue 的初始值为 1 1 1,每次更新 startValue \textit{startValue} startValue 都只会将值增加,因此可以确保 startValue \textit{startValue} startValue 是正数。

代码

class Solution {public int minStartValue(int[] nums) {int startValue = 1;int sum = 0;int length = nums.length;for (int i = 0; i < length; i++) {sum += nums[i];startValue = Math.max(startValue, -sum + 1);}return startValue;}
}

复杂度分析

  • 时间复杂度: O ( n ) O(n) O(n),其中 n n n 是数组 nums \textit{nums} nums 的长度。需要遍历数组一次计算每个元素的前缀和。

  • 空间复杂度: O ( 1 ) O(1) O(1)

http://www.lqws.cn/news/161191.html

相关文章:

  • PySpark性能调优手册:大数据处理中的避坑与实践
  • 最小硬件系统概念及其组成
  • 数据质量是什么意思?怎样做好数据质量监控?
  • ROS2 节点类中要避免While true 循环
  • Spring AI(11)——SSE传输的MCP服务端
  • 拷贝构造函数
  • (头歌作业)-6.5 幻方(project)
  • 在使用一些不用驱动大电流的设备就可以用stm32的自己的上下拉但是本身上下拉不就是给iicspi这些他通信给信号的吗中怎么还跟驱动能力扯上了有什么场景嘛
  • ProfiNet 分布式 IO 在某污水处理厂的应用
  • 自定义注解facade 实现切面 进行日志记录和参数校验
  • 智能标志桩图像监测装置如何守护地下电缆安全
  • html-pre标签
  • LeetCode 461.汉明距离
  • Spring MVC 之 异常处理
  • 简化复杂系统的优雅之道:深入解析 Java 外观模式
  • 数字证书_CA_详解
  • 2025年- H71-Lc179--39.组合总和(回溯,组合)--Java版
  • 二叉树的遍历总结
  • jdbc查询mysql数据库时,出现id顺序错误的情况
  • C:\Users\中文名修改为英文名
  • delphi7 链表 使用方法
  • 性能优化之SSR、SSG
  • 【前端】vue3性能优化方案
  • sourcetree取消待推送
  • 《计算机是怎么跑起来的》第二章读后感
  • 算法题(162):火烧赤壁
  • 13.4 AI颠覆语言学习:预录制视频+GPT-4评估如何实现60%成本降低与40%留存飙升
  • Seata 分布式事务 AT 模式
  • 智慧供水运维管理系统
  • LeetCode 70 爬楼梯(Java)