您的位置:首页 > 编程语言

编程之美--求数组的子数组之和的最大值--扩展问题

2014-01-16 14:34 323 查看
问题一,如书中提示的那样,对于情形二就是求数组的子数组之和的最小值,实现代码如下:int spanSum(int *arr,int length){
int start=arr[length-1];
int all=arr[length-1];
int sum=all;
for(int i=length-2;i>=0;i--){
sum+=arr[i];
if(start>0)
start=0;
start+=arr[i];
if(start<all)
all=start;
}
return sum-all;
}

int nospanSum(int *arr,int length){
int start=arr[length-1];
int all=arr[length-1];
for(int i=length-2;i>=0;i--){
if(start<0)
start=0;
start+=arr[i];
if(start>all)
all=start;
}
return all;
}

int maxSum(int *arr,int length){
int f=nospanSum(arr,6);
int ff=spanSum(arr,6);
if(f<ff)
f=ff;
return f;
}对于问题二,对算法做如下修改,时间复杂度不变:
int maxSum(int *arr,int length){
int start=arr[length-1];
int all=arr[length-1];
int flag=length-1;
for(int i=length-2;i>=0;i--){
if(start<0)
start=0;
start+=arr[i];
if(start>all)
all=start,flag=i;
}
printf("location is  %d\n",flag);
return all;
}
不对之处请多指正。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: