Maximum Subarray(C++最大子序和)

解题思路:

(1)动态规划, 数组为array,设dp[i] 是以array[i]结尾的子数组的最大和

(2)对于元素array[i+1], 它有两种选择:array[i+1]接着前面的子数组构成最大和,array[i+1]独自构成子数组

(3)dp[i+1]=max(dp[i]+array[i+1],array[i+1])

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        if (nums.size()==0) return 0;
        int begin=0,end=0;
        int max_here=nums[0],max_so_far=nums[0];
        for (int i=1;i<nums.size();i++) {
            if (max_here+nums[i]>nums[i]) max_here+=nums[i];
            else max_here = nums[i],begin = i;
            if (max_here>max_so_far) max_so_far = max_here,end=i;
        } 
        return max_so_far;
    }
};
发布了302 篇原创文章 · 获赞 277 · 访问量 42万+

猜你喜欢

转载自blog.csdn.net/coolsunxu/article/details/105642076