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

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

文章目录

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

题目

标题和出处

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

出处: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.xdnf.cn/news/12247.html

相关文章:

  • Vue事件总线
  • MyBatis 查询功能实现全流程
  • 《操盘实战》速读笔记
  • 使用Hutool工具进行rsa加密解密示例:
  • Linux进程替换以及exec六大函数运用
  • 【电赛培训课】测量与信号类赛题分析
  • Power Apps:自动发送运行错误邮件
  • 图着色问题(回溯)
  • Redux:不可变数据与纯函数的艺术
  • Windows和Ubuntu双系统,删除Windows
  • 用WPDRRC模型,构建企业安全防线
  • 使用Java实现M3U8视频文件合并的完整指南
  • openGauss数据库备份与恢复实践
  • 口语考试准备part1(西电)
  • Python制作史莱姆桌面宠物!可爱的
  • Apollo Auto:Cyber RT 与 ROS 通信
  • 攻防世界RE-happyctf
  • 对话式AI文本转语音合成软件CSM整合包,Sesame AI Labs多人文字转语音工具
  • CUDA安装与多版本管理
  • 算法训练第九天
  • 无法下载CUDA,下载界面链接打开异常
  • 永磁同步电机无感观测器与在线参数识别分别是什么,区别与联系是什么
  • [科研理论]机器人路径规划算法总结及fast_planner经典算法解读
  • Python6.5打卡(day37)
  • HSL颜色控制及使用示例(Hue-Saturation-Lightness)
  • 整合swagger,以及Knife4j优化界面
  • 【机械视觉】Halcon—【七、blob阈值分割】
  • nginx 同时支持ipv4与ipv6 配置
  • SLG游戏分析
  • Seata 分布式事务 AT 模式