class Solution {
public:
int maxSubArray(vector<int>& nums) {
int maxSub1 = nums[0] + nums[1];
int maxSub2 = nums[0];
int both;
int s1, s2;
int add;
for(int i = 0; i < nums.size(); i++) {
if(nums[i] > maxSub2) {
maxSub2 = nums[i];
}
}
if(nums.size() == 1) {
return nums[0];
}
else if(nums.size() == 2) {
if(nums[0] + nums[1] > max(nums[0], nums[1])) {
return (nums[0] + nums[1]);
}
else return max(nums[0], nums[1]);
}
else {
for(int i = 0; i < nums.size() - 1; i++) {
both = nums[i] + nums[i+1];
if(both > maxSub1) {
maxSub1 = both;
s1 = i;
s2 = i+1;
}
}
add = maxSub1;
for(int i = s2+1; i < nums.size(); i++) {
add += nums[i];
if(add > maxSub1) {
maxSub1 = add;
s2 = i;
}
}
add = maxSub1;
for(int i = s1-1; i >= 0; i--) {
add += nums[i];
if(add > maxSub1) {
maxSub1 = add;
s1 = i;
}
}
}
if(maxSub1 > maxSub2) {
return maxSub1;
}
else return maxSub2;
}
};
public:
int maxSubArray(vector<int>& nums) {
int maxSub1 = nums[0] + nums[1];
int maxSub2 = nums[0];
int both;
int s1, s2;
int add;
for(int i = 0; i < nums.size(); i++) {
if(nums[i] > maxSub2) {
maxSub2 = nums[i];
}
}
if(nums.size() == 1) {
return nums[0];
}
else if(nums.size() == 2) {
if(nums[0] + nums[1] > max(nums[0], nums[1])) {
return (nums[0] + nums[1]);
}
else return max(nums[0], nums[1]);
}
else {
for(int i = 0; i < nums.size() - 1; i++) {
both = nums[i] + nums[i+1];
if(both > maxSub1) {
maxSub1 = both;
s1 = i;
s2 = i+1;
}
}
add = maxSub1;
for(int i = s2+1; i < nums.size(); i++) {
add += nums[i];
if(add > maxSub1) {
maxSub1 = add;
s2 = i;
}
}
add = maxSub1;
for(int i = s1-1; i >= 0; i--) {
add += nums[i];
if(add > maxSub1) {
maxSub1 = add;
s1 = i;
}
}
}
if(maxSub1 > maxSub2) {
return maxSub1;
}
else return maxSub2;
}
};