You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中nums[i] = nums[i-1] + nums[i]代码作用解析(LeetCode1480)

解析LeetCode 1480题中nums[i] = nums[i-1] + nums[i]的作用

这段代码是LeetCode 1480题「一维数组的动态和」的原地高效解法,核心逻辑是通过修改原数组,在O(n)时间复杂度、O(1)额外空间复杂度下得到结果。

逐步拆解代码逻辑

拿你给出的输入数组nums = [1,1,1,1,1,1],一步步走循环流程:

  • 循环从i=1开始(第一个元素的动态和就是它本身,无需计算)
    • 当i=1时:nums[1] = nums[0] + nums[1] = 1 + 1 = 2,数组变为[1,2,1,1,1,1]。这里nums[0]是前1个元素的和,加上当前元素nums[1]得到前2个元素的和,把值存回nums[1],就让它变成了对应位置的动态和。
    • 当i=2时:nums[2] = nums[1] + nums[2] = 2 + 1 = 3,数组变为[1,2,3,1,1,1]。此时nums[1]已经是前2个元素的和,加上当前原数组的第三个元素,得到前3个元素的和,存回nums[2]后,它就成了第三个位置的动态和。
    • 后续i=3,4,5逻辑一致:每一步用已更新的前一个位置的动态和,加上当前位置的原始值,得到当前位置的动态和,再覆盖原位置的值。

为什么要赋值给nums[i]?

这行赋值有两个关键作用:

  1. 节省空间:不需要额外创建新数组存储动态和,直接复用原数组空间,把每个位置逐步替换成对应动态和,空间复杂度从O(n)降到O(1)。
  2. 为后续循环提供正确依赖:循环从左到右执行,后面位置的动态和计算需要依赖前面位置的动态和结果。如果不把计算结果赋值回nums[i],后续循环只能拿到原数组的原始值,无法得到正确的累计和。

最终效果

循环结束后,原数组每个位置nums[i]都会变成前i+1个元素的和(数组索引从0开始),也就是题目要求的动态和数组。你给出的代码运行后会输出[1,2,3,4,5,6],完全符合题目要求。

内容的提问来源于stack exchange,提问作者Alexander Nguyen-Phuoc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 17:52:11