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
.
O(N^2) 解法:
int maxSubArray(int* nums, int numsSize) {
int max = nums[0];
int sum = 0;
for (int i = 0; i < numsSize; i++) {
sum = 0;
for (int j = i; j < numsSize; j++) {
sum += nums[j];
if (max < sum) max = sum;
}
}
return max;
}
O(N)解法:
int maxSubArray(int* nums, int numsSize) {
int max = nums[0];
int local = nums[0];
for (int i = 1; i < numsSize; i++) {
local = (local > 0)? local + nums[i]: nums[i];
max = (max < local)? local: max;
}
return max;
}
分析:
1. 分爲兩個部分,local和max
2. local如果小於等於0,那麼就截斷,繼續往後找
3. max寄存已經找到的最大值