算法题:一维数组的动态和

发布时间:2026/7/9 1:53:07
算法题:一维数组的动态和 给你一个数组nums。数组「动态和」的计算公式为runningSum[i] sum(nums[0]…nums[i])。请返回nums的动态和。输入nums [1,2,3,4] 输出[1,3,6,10] 解释动态和计算过程为 [1, 12, 123, 1234] 。输入nums [1,1,1,1,1] 输出[1,2,3,4,5] 解释动态和计算过程为 [1, 11, 111, 1111, 11111] 。class Solution { public: vectorint runningSum(vectorint nums) { for (int i 1; i nums.size(); i) { nums[i] nums[i - 1]; } return nums; } };总结时间复杂度O(n)只需遍历数组一次循环次数等于数组长度。空间复杂度O(1)原地修改除了输入数组外只用了几个临时变量i没有额外申请大块内存。前缀和模型Prefix SumrunningSum就是最原始的前缀和数组。以后遇到“求子数组的和”如 LeetCode 560. 和为 K 的子数组第一反应就是构建前缀和数组用减法sum[i] - sum[j]来求子数组和。动态规划的简化版DP状态转移方程dp[i] dp[i-1] nums[i]是 DP 中最简单的“一维线性递推”。它让你意识到当前结果可以由上一个状态推导出来而不需要每次都从头加到尾这会把 O(n) 变成 O(n²)。这道题的核心就是用一句话的递推公式nums[i] nums[i-1]通过“原地修改”实现 O(n) 时间、O(1) 空间的累加同时必须注意循环的起始位置从 1 开始和结束条件 size()