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
.
class Solution {
public:
int maxSubArray(int A[], int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int sum = 0;
int max = A[0];
for (int i = 0; i < n; ++i) {
if (sum + A[i] <= 0) {
if (sum == 0) {
max = max > A[i] ? max : A[i];
} else {
max = sum > max ? sum : max;
sum = 0;
}
} else {
if (A[i] < 0) {
max = sum > max ? sum : max;
}
sum += A[i];
}
}
if (sum > 0) {
max = max > sum ? max : sum;
}
return max;
}
};
#define max(x,y) (x)>(y)?(x):(y)
class Solution {
public:
int maxSubArray(int A[], int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int maxSum = A[0];
int sum = A[0];
bool allNeg = A[0] < 0 ? true : false;
for (int i = 1; i < n; ++i) {
if (allNeg && A[i] < 0) {
sum = max(sum, A[i]);
} else {
allNeg = false;
sum = max(max(sum + A[i], 0), A[i]);
}
maxSum = max(maxSum, sum);
}
return maxSum;
}
};