[Medium]Maximum Subarray

来源:互联网 发布:智通作图软件 编辑:程序博客网 时间:2024/06/03 21:11

问题:
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.
解法:
采用动态规划算法和分治算法。
sum用来存储从某个数开始的子数组的和。
maxsum用来存储某个数之前的子数组的最大子数组的和。
sum[n]=max(nums[n],sum[n-1]+nums[n])
maxsum[n]=max(sum[n],maxsum[n-1])
根据以上两条公式,代码如下,算法的时间复杂度和空间复杂度均为O(n);
源码:

class Solution {public:    int maxSubArray(vector<int>& nums) {        int maxsum=nums[0];        int sum=maxsum;        for(int i=1;i<nums.size();i++)        {            if(sum>=0)sum+=nums[i];            else sum=nums[i];            if(sum>maxsum)maxsum=sum;        }        return maxsum;    }};
0 0
原创粉丝点击