社区
C语言
帖子详情
求出最大的一个子数组和
wanglaibing
2009-08-06 06:09:12
一个数组(里面有正数和负数)求出最大的一个子数组和,
子数组是连续的,长度没有限制。
哪位朋友能用一次循环把结果得出?
maxsofar = 0;
for(i=0;i <n;i++){
sum=0;
for(j = i;j <n;j++){
sum+= x[j]; //sum is sum of x[i..j]
maxsofar = max(maxsofar,sum);
}
}
(这里用了两次)
把这个改成递归(只要里面一次循环)可以不?不知怎么改???
...全文
251
17
打赏
收藏
求出最大的一个子数组和
一个数组(里面有正数和负数)求出最大的一个子数组和, 子数组是连续的,长度没有限制。 哪位朋友能用一次循环把结果得出? maxsofar = 0; for(i=0;i <n;i++){ sum=0; for(j = i;j <n;j++){ sum+= x[j]; //sum is sum of x[i..j] maxsofar = max(maxsofar,sum); } } (这里用了两次) 把这个改成递归(只要里面一次循环)可以不?不知怎么改???
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hsf1002
2009-08-27
打赏
举报
回复
mark 4楼
mstlq
2009-08-07
打赏
举报
回复
十分抱歉,8楼说法有误,请楼主无视>_<
mstlq
2009-08-07
打赏
举报
回复
[Quote=引用 4 楼 liao05050075 的回复:]
最大子段和问题
使用DP可以做到O(n),也就一次for
int MaxSum(int n,int *a)
{
int sum=0,b=0;
for(int i=0;i <n;i++)
{
if(b>0) b+=a[i];
else b=a[i];
if(b>sum) sum=b;
}
return sum;
}
其中b表示,以a[i]为结束位置的最大子段和
[/Quote]
提醒楼主,这种做法和3楼的一样,遇到下面的情况是会得出不正确的结果的
测试例子
{ 2,3,-1,98 ,-5}
starcat
2009-08-07
打赏
举报
回复
Mark Allen Weiss那本书的。
#include <stdio.h>
int MaxSubsequenceSum( const int A[], int N )
{
int ThisSum, MaxSum, j;
ThisSum = MaxSum = 0;
for( j = 0; j < N; j++)
{
ThisSum += A[ j ];
if( ThisSum > MaxSum )
MaxSum = ThisSum;
else if( ThisSum < 0 )
ThisSum = 0;
}
return MaxSum;
}
main()
{
int arr[10] = {4, -3, 5, -2, -1, 2, 6, -2};
int result;
result = MaxSubsequenceSum( arr, 8 );
printf("MaxSum is :%d\n", result );
}
wanglaibing
2009-08-07
打赏
举报
回复
我采用了4楼的
zhusizhi007
2009-08-07
打赏
举报
回复
好,学习中,三楼的应该是正确的。。。。。
wanglaibing
2009-08-07
打赏
举报
回复
分太少了,不过我这份情义在,请你们接受,谢大家了
pengzhixi
2009-08-07
打赏
举报
回复
mark
liyudefly
2009-08-07
打赏
举报
回复
3楼正解。
amossavez
2009-08-07
打赏
举报
回复
这道题在数据结构与算法c版那本书上有,3楼的就是最佳解法
jiayucunyan
2009-08-07
打赏
举报
回复
不好意思
lz
昨天下班,回家了
我认为3楼,正解
jinwei1984
2009-08-06
打赏
举报
回复
DP
kakashi0309
2009-08-06
打赏
举报
回复
mark
liao05050075
2009-08-06
打赏
举报
回复
最大子段和问题
使用DP可以做到O(n),也就一次for
int MaxSum(int n,int *a)
{
int sum=0,b=0;
for(int i=0;i<n;i++)
{
if(b>0) b+=a[i];
else b=a[i];
if(b>sum) sum=b;
}
return sum;
}
其中b表示,以a[i]为结束位置的最大子段和
guoyichao
2009-08-06
打赏
举报
回复
maxsofar = 0;
sum = 0;
for(i=0;i <n;i++){
sum += x[i];
if (sum < 0) {
sum = 0;
continue;
}
if (maxsofar < sum) maxsofar = sum;
}
kojie_chen
2009-08-06
打赏
举报
回复
我记得软件设计师考试的那本书里有这个完全详解
kojie_chen
2009-08-06
打赏
举报
回复
典型的动态规划,DP问题
Linux系统编程第06期:从零实现
一个
shell解释器
在Linux环境下,shell是
一个
位于操作系统和用户应用程序之间的工具,我们在shell终端下敲入命令并运行,或者直接运行
一个
脚本文件,这背后都是shell在帮助我们解析命令并创建
一个
个
子
进程去执行。为了更深一层去探寻...
一个
有N个元素的整型
数组
,求该
数组
的各个
子
数组
中,
子
数组
之和的
最大
值是多少?
一个
有N个元素的整型
数组
,求该
数组
的各个
子
数组
中,
子
数组
之和的
最大
值是多少?
一个
有 N个元素的整型
数组
,求该
数组
的各个
子
数组
中,
子
数组
之和的
最大
值是多少? 例如
数组
a[6]={-2,5,3,-6,4,-8,6};则
子
数组
之和的
最大
值是 8(即 a[1]+a[2])。
一个
有 N个元素的整型
数组
,求该
数组
的各个
子
数组
中,
子
数组
之和的
最大
值是多少? 例如
数组
a[6]={-2,5,3,-6,4,-8,6};则
子
数组
之和的
最大
值是 8(即 a[1]+a[2])。 更多资料请点击:我的目录 #include <stdio.h>...
求二维
数组
最大
子
数组
的和
根据求一维
子
数组
的
最大
子
数组
和的列
子
,把二维
数组
分解成若干个一维
子
数组
,如m行n列的
数组
可分为(m+1)*m/2个
子
数组
,在求每个一维
数组
的
最大
子
数组
和,把这些和放入
一个
数组
中,求这个
数组
的
最大
值就是二维
数组
...
2021-12-26:给定
一个
长度为n的
数组
arr,求有多少个
子
数组
满足 :
子
数组
两端的值,是这个
子
数组
的最小值和次小值,最小值和次小值谁在最左和最右无所谓。 n<=100000(10^5) n*
2021-12-26:给定
一个
长度为n的
数组
arr,求有多少个
子
数组
满足 :
子
数组
两端的值,是这个
子
数组
的最小值和次小值,最小值和次小值谁在最左和最右无所谓。 n<=100000(10^5) n*logn O(N)。 来自腾讯。 答案2021-...
C语言
69,373
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章