LeetCode--Maximum Subarray

来源:互联网 发布:淘宝韩国女模特 编辑:程序博客网 时间:2024/05/22 10:32

Find the contiguous subarray within an array (containing at least one number) which has the largest sum.

For example, given the array [-2,1,-3,4,-1,2,1,-5,4],
the contiguous subarray [4,-1,2,1] has the largest sum = 6.

思路:动态规划法。
这是一个一维的动态规划问题,dp[i]表示以nums[i]结尾的最大子数组,结果res是一次遍历后所有情况dp[i]中的最大值。
深入分析问题可知,最大子数组的条件是当前数字加上之前的最大子数组,如果之前的最大子数组为负数,则没有新的贡献,不如重新以当前数字为起点开始,反之为正数,有贡献,即可继续。

class Solution {public:    int maxSubArray(vector<int>& nums) {        int n=nums.size();        int dp[n];        dp[0]=nums[0];        int res=dp[0];        for(int i=1;i<n;i++){            dp[i]=nums[i]+(dp[i-1]>0?dp[i-1]:0);            res=max(res,dp[i]);        }        return res;    }};
原创粉丝点击