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

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

文章目录

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

题目

标题和出处

标题:一维数组的动态和

出处: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)。注意返回值不计入空间复杂度。

相关文章:

  • 九(4).存在指针的引用,不存在引用的指针
  • RNN循环网络:给AI装上“记忆“(superior哥AI系列第5期)
  • YOLOV7改进之融合深浅下采样模块(DSD Module)和轻量特征融合模块(LFI Module)
  • ubuntu 添加应用到启动菜单
  • CppCon 2014 学习:Hardening Your Code
  • 【Python 进阶2】抽象方法和实例调用方法
  • FDR的定位原理
  • Spring 5 响应式编程:构建高性能全栈应用的关键
  • PID项目-记事本不显示下划线
  • 《软件项目管理》第二章(项目准备与启动)期末周复习总结笔记
  • 九(2).参数类型为引用结构体类型
  • ROS机器人和NPU的往事和新知-250602
  • PCA(K-L变换)人脸识别(python实现)
  • 用Python开启游戏开发之旅
  • 抠图P图秀v7.8.19
  • Mysql水平分表(基于Mycat)及常用分片规则
  • 学到新的日志方法mp
  • C语言基础(10)【二维数组 字符数组 字符串相关操作】
  • CangjieMagic 智能体框架嵌入式系统实测:以树莓派 4B 为例
  • 探秘Transformer系列之(35)--- 大模型量化基础
  • 网站正在建设中的图片大全/网站优化排名的方法
  • wordpress模版 使用教程/南昌seo网站排名
  • wordpress 隐藏副标题/seo团队
  • 做粉丝网站会侵权吗/百度指数怎么查询
  • 什么是网络营销信息/seo资讯推推蛙
  • wordpress dns ip/seoul