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]?
这行赋值有两个关键作用:
- 节省空间:不需要额外创建新数组存储动态和,直接复用原数组空间,把每个位置逐步替换成对应动态和,空间复杂度从O(n)降到O(1)。
- 为后续循环提供正确依赖:循环从左到右执行,后面位置的动态和计算需要依赖前面位置的动态和结果。如果不把计算结果赋值回
nums[i],后续循环只能拿到原数组的原始值,无法得到正确的累计和。
最终效果
循环结束后,原数组每个位置nums[i]都会变成前i+1个元素的和(数组索引从0开始),也就是题目要求的动态和数组。你给出的代码运行后会输出[1,2,3,4,5,6],完全符合题目要求。
内容的提问来源于stack exchange,提问作者Alexander Nguyen-Phuoc
相关产品推荐
相关产品推荐

