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;
}
};

本文介绍了一种寻找具有最大和的连续子数组的算法。通过动态规划方法,使用vector优化空间复杂度,实现O(n)时间复杂度的有效解决方案。提供两种实现思路,包括利用临时变量进行中间结果更新的方法。
328

被折叠的 条评论
为什么被折叠?



