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.
思路:简单动态规划(用vector代替数组,来节省空间)
//12 ms
class Solution {
public:
vector<int> dp;
long mmax = 1<<31;
int maxSubArray(vector<int>& nums) {
int len = nums.size();
dp.push_back(nums[0]);
mmax = dp[0];
for(int i=1;i<len;i++)
{
int tmp = 0;
if(dp[i-1] > 0)
tmp = dp[i-1] + nums[i];
else
tmp = nums[i];
dp.push_back(tmp);
if(dp[i] > mmax)
mmax = dp[i];
}
return mmax;
}
};
看到solution区一个解法也不错,也是 O(n)
// 12 ms
class Solution {
public:
int maxSubArray(vector<int>& A) {
int ans=A[0], i, j, sum=0, n = A.size();
for(i=0;i<n;i++){
sum += A[i];
ans = max(sum,ans);
sum = max(sum,0);
}
return ans;
}
};