输入一个长度为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; }