Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
Example:
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
.
Note:
If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.
Source Code(C++):
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
/******************************************
//时间复杂度O(n2)
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int n = nums.size();
int sum = 0;
int ans = nums[0];
for (int i = 0; i < n; i++) {
sum = 0;
for (int j = i; j < n; j++) {
sum += nums[j];
ans = max(ans, sum);
}
}
return ans;
}
};
*********************************************/
//时间复杂度O(n)
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int n = nums.size();
int sum = 0;
int ans = nums[0];
for (int i = 0; i < n; i++) {
sum += nums[i];
ans = max(ans, sum);
sum = max(0, sum);
}
return ans;
}
};
int main() {
Solution s;
vector<int> v = { -2,1,-3,4,-1,2,1,-5,4 };
cout << s.maxSubArray(v);
return 0;
}