最大连续子数组和 (动态规划)

题目:

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。

示例:

输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。

解题思路:

本题采用动态规划算法。

动态方程为:dp[i]=max(dp[i]+nums[i],nums[i])

初始值:dp[0]=nums[0]

dp[i]代表的以nums[i]开头的最大子数组和

 源代码如下:

class Solution {
public:
    int maxSubArray(vector& nums) {
    //动态规划
        if(nums.size()==1) return nums[0];//数组长度为1时,直接返回这个数即可
        int n=nums.size();//数组长度为n
        vector dp(n,0);//定义dp,长度为n,初始值为0
        dp[0]=nums[0];//给dp进行初始化,dp[i]表示的是以nums[i]开头的最大连续子数组之和
        int sum=dp[0];//定义sum为最大总和
        for(int i=1;i

你可能感兴趣的:(数据结构,算法,c++,leetcode)