输入一个长度为n的整型数组array,数组中的一个或连续多个整数组成一个子数组,子数组最小长度为1。求所有子数组的和的最大值。
数据范围:
要求:时间复杂度为
,空间复杂度为
进阶:时间复杂度为
,空间复杂度为 )
[1,-2,3,10,-4,7,2,-5]
18
经分析可知,输入数组的子数组[3,10,-4,7,2]可以求得最大和为18
[2]
2
[-10]
-10
#define MIN_VAL -101
int FindGreatestSumOfSubArray(int* array, int arrayLen )
{
// write code here
if(array == NULL || arrayLen == 0)
return 0;
int sum = MIN_VAL,ret = MIN_VAL;
for(int i=0;i<arrayLen;i++)
{
if(sum+array[i] > array[i])
sum +=array[i];
else
sum = array[i];
if(ret < sum)
ret = sum;
}
return ret;
} int FindGreatestSumOfSubArray(int* array, int arrayLen ) {
// write code here
int max = -101 , num = 0;
for(int i = 0 ; i < arrayLen ; i++){
num += array[i];
if(num > max){
max = num;
}
if(num < 0){
num = 0;
}
}
return max;
} int FindGreatestSumOfSubArray(int* array, int arrayLen )
{
int i,j;
int sum=0;
int sum1=array[0];
for(i=0;i<arrayLen;i++)
{
if(sum<0)
{
sum=array[i];
}
else
{
sum=sum+array[i];
}
if(sum>sum1)
sum1=sum;
}
return sum1;
} /**
*
* @param array int整型一维数组
* @param arrayLen int array数组长度
* @return int整型
*
* C语言声明定义全局变量请加上static,防止重复定义
*
* C语言声明定义全局变量请加上static,防止重复定义
*/
int FindGreatestSumOfSubArray(int* array, int arrayLen ) {
// write code here
int maxvalue=array[0];
int* s=(int*)malloc(sizeof(int)*arrayLen);
s[0]=array[0];
for(int i=1;i<arrayLen;i++){
if((s[i-1]+array[i])>=array[i])
s[i]=s[i-1]+array[i];
else
s[i]=array[i];
if(maxvalue<s[i])
maxvalue=s[i];
}
return maxvalue;
} /**
*
* @param array int整型一维数组
* @param arrayLen int array数组长度
* @return int整型
*
* C语言声明定义全局变量请加上static,防止重复定义
*/
int FindGreatestSumOfSubArray(int* array, int arrayLen ) {
// write code here
int sum,max;
max = -100,sum = 0;
for(int i=0; i<arrayLen; i++)
{
sum += array[i];
if(sum > max ) max = sum;
if(sum < 0 ) sum = 0; //舍弃前面<0的和
}
return max;
}
public class Solution { public int FindGreatestSumOfSubArray(int[] array) { if (array.length==0 || array==null) { return 0; } int curSum=0; int greatestSum=0x80000000; for (int i = 0; i < array.length; i++) { if (curSum<=0) { curSum=array[i]; //记录当前最大值 }else { curSum+=array[i]; //当array[i]为正数时,加上之前的最大值并更新最大值。 } if (curSum>greatestSum) { greatestSum=curSum; } } return greatestSum; } }