Skip to content

Commit c5d7881

Browse files
C: add problem 53 and test function
1 parent 1c1e2f0 commit c5d7881

File tree

1 file changed

+10
-14
lines changed

1 file changed

+10
-14
lines changed

C/51-100/53-Maximum-Subarray.c

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,18 @@
77
*/
88
#include
99
#include
10-
int maxSubArray(int* nums, int numsSize) {
11-
if(numsSize == 1)
12-
return nums[0];
13-
int sum=0,maxSum = 0;
14-
for (int i = 0; i < numsSize; ++i) {
15-
sum+=nums[i];
16-
if(sum>maxSum)
17-
maxSum = sum;
18-
else if(sum<0)
19-
sum = 0;
10+
11+
int maxSubArray(int *nums, int numsSize) {
12+
int maxSoFar = nums[0], maxEndingHere = nums[0];
13+
for (int i = 1; i < numsSize; ++i) {
14+
maxEndingHere = maxEndingHere < 0 ? nums[i] : (maxEndingHere + nums[i]);
15+
maxSoFar = maxSoFar > maxEndingHere ? maxSoFar : maxEndingHere;
2016
}
21-
return maxSum;
17+
return maxSoFar;
2218
}
2319

24-
void testMaxSubArray(){
20+
void testMaxSubArray() {
2521
// int a[] = {-2,1,-3,4,-1,2,1,-5,4};
26-
int a[] = {-2,-1};
27-
printf("%d",maxSubArray(a,sizeof(a)/sizeof(int)));
22+
int a[] = {-2, -1};
23+
printf("%d", maxSubArray(a, sizeof(a) / sizeof(int)));
2824
}

0 commit comments

Comments
 (0)