【LeetCode_1480】一维数组的动态和_Python&Java_动态规划解法

刷题记录。解题参考了一些比较好的解答。如有侵权,请联系博主删除。

题目描述

给你一个数组 nums 。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i]) 。

请返回 nums 的动态和。

示例 1:
输入:nums = [1,2,3,4]
输出:[1,3,6,10]
解释:动态和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4] 。
示例 2:
输入:nums = [1,1,1,1,1]
输出:[1,2,3,4,5]
解释:动态和计算过程为 [1, 1+1, 1+1+1, 1+1+1+1, 1+1+1+1+1] 。
示例 3:
输入:nums = [3,1,2,10,1]
输出:[3,4,6,16,17]
提示:
1 <= nums.length <= 1000
-10^6 <= nums[i] <= 10^6

方法一、python列表动态规划

参考Python 为什么要动态规划?【全国最菜这个什么什么】

什么是动态规划?可以简单理解为前一子问题的解,为后一子问题的求解提供了有用的信息,类似于数学中的数学归纳法。

Python解法

思路:利用一个临时变量存储上一元素的和。个人觉得还是动态规划的思路。

class Solution(object):
    def runningSum(self, nums):
        output = []
        temp = 0

        for i in nums:
            output.append(i + temp)
            print("output=",output)
            temp += i#temp存储上一个数
            print("temp=",temp)

        return output

耗时16ms

复杂度分析

时间复杂度:O(n)
空间复杂度:O(n)

方法二、原数组上动态规划

思路:在原数组上累和。注意从序号为1的数开始计算。因为序号-1会溢出。

Python解法

class Solution(object):
    def runningSum(self, nums):
        if not nums:#数组为空
            return []
        for i in range(1,len(nums)):
            nums[i]=nums[i]+nums[i-1]
        return nums

耗时24ms

Java解法

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

耗时0ms

复杂度分析

时间复杂度:O(n)
空间复杂度:O(1)

总结

这道题主要考察是否在原数组上操作。第二种方法在原数组上操作,无需开辟一个新的列表空间,更优。第一种方法更好理解。

博主比较小白,但是热爱分享。一直感觉自己写代码的能力,算法能力都不太行,所以最近开始刷LeetCode,一方面记录方便自己学习,另一方面给需要的同伴参考。虽然失败并不可怕,但是也希望同伴们少踩一些坑。分析算法挺费劲的,留个赞或评论支持一下博主吧!同时我也非常希望写出更通俗易懂的文章,知识尚浅,如有遗漏或错误,欢迎指正~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯狂java杰尼龟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值