| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 691 人关注过本帖
标题:[求助]最小和问题
只看楼主 加入收藏
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
结帖率:50%
收藏
 问题点数:0 回复次数:8 
[求助]最小和问题
问题描述:给定整型数组a[n](n>0),要求数组a[n]中相邻元素的最小和.
例如:1 -2 3 -1 -5 -4 1 0 -2 5 -1
则a中相邻元素的最小和为(-1)+(-5)+(-4)+1+0+(-2)=-11.

问题要求:求一时间复杂度为O(n)算法.谢谢!

[此贴子已经被作者于2006-9-17 23:04:48编辑过]

搜索更多相关主题的帖子: 元素 
2006-09-17 23:04
cwande
Rank: 2
等 级:新手上路
威 望:3
帖 子:333
专家分:0
注 册:2006-8-18
收藏
得分:0 
应该是最小子段和吧.
设f[i]为第i个元素为最后一个元素的最小和,
若f[i-1]>0,f[i]=a[i];
若f[i-1]<0,f[i]=a[i]+f[i-1];
f[0]=0;
一个for循环就可以搞定了

汗,都懒得写代码了.......... cheat了一个威望,哈.....
2006-09-17 23:24
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

/*是这样吗?太感谢你了,谢谢...*/
#include<stdio.h>
#define N 50
int Min(int a[],int n)
{
int i=1,min=0,f[N];
f[0]=a[0];
min=f[0];
while(i<n)
{
if(f[i-1]>0)
{
f[i]=a[i];
}
else
{
f[i]=a[i]+f[i-1];
}
if(f[i]<min)
{
min=f[i];
}
//printf("%d\n",f[i]);
i++;
}
return(min);
}

int main()
{
int a[N]={1,-2,3,-1,-5,-4,1,0,-2,5,-1};
printf("min=%d\n",Min(a,11));
return(0);
}


倚天照海花无数,流水高山心自知。
2006-09-18 09:17
cwande
Rank: 2
等 级:新手上路
威 望:3
帖 子:333
专家分:0
注 册:2006-8-18
收藏
得分:0 
恩,差不多是这样子,
事实上数组f用一个变量代替就足够了

汗,都懒得写代码了.......... cheat了一个威望,哈.....
2006-09-18 12:14
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

后来想到了.

#include<stdio.h>
#define N 50
int Min(int a[],int n)
{
int i=1,min=0,f;
f=a[0];
min=f;
while(i<n)
{
if(f>0)
{
f=a[i];
}
else
{
f=a[i]+f;
}
if(f<min)
{
min=f;
}
//printf("%d\n",f);
i++;
}
return(min);
}

int main()
{
int a[N]={1,-2,3,-1,-5,-4,1,0,-2,5,-1};
printf("min=%d\n",Min(a,11));
return(0);
}




倚天照海花无数,流水高山心自知。
2006-09-18 12:34
perfect
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:81
专家分:0
注 册:2006-11-19
收藏
得分:0 

对于 -1,4,1,3,-1
调用Min(a,5)
输出-1,相邻元素的最小和应该是 3+(-1)=2
1,2,3,4,5 调用Min(a,5) 输出的是1
应该是1+2=3啊


片言可以明百意 坐驰可以役万里
2006-11-22 12:16
cwande
Rank: 2
等 级:新手上路
威 望:3
帖 子:333
专家分:0
注 册:2006-8-18
收藏
得分:0 
[1,1]也算一个区间的.

汗,都懒得写代码了.......... cheat了一个威望,哈.....
2006-11-22 17:01
perfect
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:81
专家分:0
注 册:2006-11-19
收藏
得分:0 

问题描述:给定整型数组a[n](n>0),要求数组a[n]中相邻元素的最小和.
例如:1 -2 3 -1 -5 -4 1 0 -2 5 -1
则a中相邻元素的最小和为(-1)+(-5)+(-4)+1+0+(-2)=-11.

一个数也是相邻吗?


#include<stdio.h>
#define N 50
int Min(int a[],int n)
{
int i=1,min=0,f;
f=a[0];
min=a[0]+a[1];
while(i<n)
{
if(f>0)
{
f=a[i]+a[i-1];
}
else
{
f=a[i]+f;
}
if(f<min)
{
min=f;
}
//printf("%d\n",f);
i++;
}
return(min);
}

int main()
{
int a[N]={1,-2,3,-1,-5,-4,1,0,-2,5,-1};
printf("min=%d\n",Min(a,11));
return(0);
}


片言可以明百意 坐驰可以役万里
2006-11-22 21:33
cwande
Rank: 2
等 级:新手上路
威 望:3
帖 子:333
专家分:0
注 册:2006-8-18
收藏
得分:0 

个人的理解不同而已........


汗,都懒得写代码了.......... cheat了一个威望,哈.....
2006-11-22 22:16
快速回复:[求助]最小和问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026354 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved