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

前缀和题目:一维数组的动态和

文章目录

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

题目

标题和出处

标题:一维数组的动态和

出处:1480. 一维数组的动态和

难度

1 级

题目描述

要求

给定一个数组 nums \texttt{nums} nums。数组动态和的计算公式为: runningSum[i] = sum(nums[0] ... nums[i]) \texttt{runningSum[i] = sum(nums[0] ... nums[i])} runningSum[i] = sum(nums[0] ... nums[i])

返回 nums \texttt{nums} nums 的动态和。

示例

示例 1:

输入: nums = [1,2,3,4] \texttt{nums = [1,2,3,4]} nums = [1,2,3,4]
输出: [1,3,6,10] \texttt{[1,3,6,10]} [1,3,6,10]
解释:动态和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4] \texttt{[1, 1+2, 1+2+3, 1+2+3+4]} [1, 1+2, 1+2+3, 1+2+3+4]

示例 2:

输入: nums = [1,1,1,1,1] \texttt{nums = [1,1,1,1,1]} nums = [1,1,1,1,1]
输出: [1,2,3,4,5] \texttt{[1,2,3,4,5]} [1,2,3,4,5]
解释:动态和计算过程为 [1, 1+1, 1+1+1, 1+1+1+1, 1+1+1+1+1] \texttt{[1, 1+1, 1+1+1, 1+1+1+1, 1+1+1+1+1]} [1, 1+1, 1+1+1, 1+1+1+1, 1+1+1+1+1]

示例 3:

输入: nums = [3,1,2,10,1] \texttt{nums = [3,1,2,10,1]} nums = [3,1,2,10,1]
输出: [3,4,6,16,17] \texttt{[3,4,6,16,17]} [3,4,6,16,17]

数据范围

  • 1 ≤ nums.length ≤ 1000 \texttt{1} \le \texttt{nums.length} \le \texttt{1000} 1nums.length1000
  • -10 6 ≤ nums[i] ≤ 10 6 \texttt{-10}^\texttt{6} \le \texttt{nums[i]} \le \texttt{10}^\texttt{6} -106nums[i]106

解法一

思路和算法

用数组 sums \textit{sums} sums 表示数组 nums \textit{nums} nums 的动态和。根据动态和的定义, sums [ i ] \textit{sums}[i] sums[i] 等于 nums \textit{nums} nums 的下标范围 [ 0 , i ] [0, i] [0,i] 中的所有元素之和,因此可以直接计算动态和。

代码

class Solution {public int[] runningSum(int[] nums) {int length = nums.length;int[] sums = new int[length];for (int i = 0; i < length; i++) {for (int j = 0; j <= i; j++) {sums[i] += nums[j];}}return sums;}
}

复杂度分析

  • 时间复杂度: O ( n 2 ) O(n^2) O(n2),其中 n n n 是数组 nums \textit{nums} nums 的长度。计算每个元素的动态和的时间是 O ( n ) O(n) O(n),时间复杂度是 O ( n 2 ) O(n^2) O(n2)

  • 空间复杂度: O ( 1 ) O(1) O(1)。注意返回值不计入空间复杂度。

解法二

思路和算法

根据动态和的定义, sums [ 0 ] = nums [ 0 ] \textit{sums}[0] = \textit{nums}[0] sums[0]=nums[0]。当 i > 0 i > 0 i>0 时, sums [ i ] − sums [ i − 1 ] = nums [ i ] \textit{sums}[i] - \textit{sums}[i - 1] = \textit{nums}[i] sums[i]sums[i1]=nums[i],因此 sums [ i ] = sums [ i − 1 ] + nums [ i ] \textit{sums}[i] = \textit{sums}[i - 1] + \textit{nums}[i] sums[i]=sums[i1]+nums[i]。按照下标从小到大的顺序依次计算每个元素的动态和,则计算每个元素的动态和的时间是 O ( 1 ) O(1) O(1),总时间复杂度是 O ( n ) O(n) O(n)

代码

class Solution {public int[] runningSum(int[] nums) {int length = nums.length;int[] sums = new int[length];sums[0] = nums[0];for (int i = 1; i < length; i++) {sums[i] = sums[i - 1] + nums[i];}return sums;}
}

复杂度分析

  • 时间复杂度: O ( n ) O(n) O(n),其中 n n n 是数组 nums \textit{nums} nums 的长度。计算每个元素的动态和的时间是 O ( 1 ) O(1) O(1),时间复杂度是 O ( n ) O(n) O(n)

  • 空间复杂度: O ( 1 ) O(1) O(1)。注意返回值不计入空间复杂度。

http://www.xdnf.cn/news/10585.html

相关文章:

  • Unity中的MonoSingleton<T>与Singleton<T>
  • Golang——5、函数详解、time包及日期函数
  • 如何使用DAXStudio将PowerBI与Excel连接
  • python,Dataframe基于所有包含某个关键字的列等于某个值过滤
  • PostgreSQL的扩展 insert_username
  • 高等数学笔记 第八章——向量代数与空间解析几何2
  • Mysql备份
  • 助力活力生活的饮食营养指南
  • Python----目标检测(训练YOLOV8网络)
  • 【Java Web】6.登入认证
  • 使用 MCP 将代理连接到 Elasticsearch 并对索引进行查询
  • 电脑为什么换个ip就上不了网了
  • Java Netty 中处理粘包和半包问题的解决方案 | TCP消息完整性校验(XOR )
  • JavaScript性能优化:实战技巧提升10倍速度
  • 【性能调优系列】深入解析火焰图:从基础阅读到性能优化实战
  • 【python深度学习】Day43 复习日
  • MG影视登录解锁永久VIP会员 v8.0 支持手机电视TV版影视直播软件
  • 抛砖引玉:RadarDet4D,NuScenes数据集Radar模态目标检测第二名(即将开源)
  • 【Elasticsearch】Elasticsearch 核心技术(一):索引
  • Attention注意力机制
  • 【git-首次初始化本地项目、关联远程仓库】
  • 飞牛fnNAS存储空间模式详解
  • 缓存击穿、缓存雪崩、缓存穿透以及数据库缓存双写不一致问题
  • Transformer相关
  • 辅助角公式
  • 财管-0-战略和战略管理
  • Spring Boot + MyBatis 实现的简单用户管理项目的完整目录结构示例
  • AI 医疗影像诊断:技术实现、临床应用与未来趋势 —— 以肺部 CT 早期肺癌检测为例
  • 文言文停词库 | 古文停词库 | 624个简体停词 |文言文python分词库-thulac
  • Baklib知识中台加速企业服务智能化实践