Given an integer array nums
, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.
Example:
Input: [-2,1,-3,4,-1,2,1,-5,4], Output: 6 Explanation: [4,-1,2,1] has the largest sum = 6.
我的思路如下:
这个题肯定是O(n)的复杂度,因为对于数组扫一遍就可以得出结论。
我的思路是,我们去比较所有可能最大值去比较,然后取出那个最终的最大值就行了。那如何去判断所有可能的最大值呢?
如果一连串的数字的加和是正数,那么这串数字我称他们为“有意义的串”,有意义的串和后面的数字相加就是潜在的最大值。如果一连串的数字的加和已经是负数了,那么和下一个数字的加和肯定是小于下一个数字的。
我这边写出的解答如下:
int maxSubArray(int* nums, int numsSize) {
int max = nums[0];
long long int sum = 0;
int i=0;
for(i=0;i<numsSize;i++){
sum = sum + nums[i];
if(sum > INT_MAX)
return INT_MAX;
if(sum > max)
max = sum;
if(sum < 0)
sum = 0;
}
return max;
}