免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: whpu000625
打印 上一主题 下一主题

求一个数组中最大的相邻元素之和 [复制链接]

论坛徽章:
0
31 [报告]
发表于 2004-12-29 17:03 |只看该作者

求一个数组中最大的相邻元素之和

老天啊,yuxh是不是还准备把程序简化到一两行?受不了了,很受伤,很受打击.aero,借个肩膀用一下.哇哇哇................

论坛徽章:
0
32 [报告]
发表于 2004-12-29 22:28 |只看该作者

求一个数组中最大的相邻元素之和

佩服yuxh的算法,觉得我考虑问题真是含糊不清。
后来把程序又写了一下,先贴了再研究yuxh的程序
  1. #include<iostream>;
  2. using std::cout;
  3. using std::endl;

  4. void MaxSum(int* ip,int size)
  5. {
  6.         int sum=ip[0],sum1=0,start=0,end=0,start1,end1;
  7.         int i=0;

  8.         while(i<size&&ip[i]<=0)
  9.         {
  10.                 if(ip[i]>;sum)
  11.                 {
  12.                         sum=ip[i];
  13.                         start=end=i;
  14.                 }
  15.                 i++;
  16.         }

  17.         while(i<size)
  18.         {
  19.                 if(ip[i]>;0)
  20.                 {
  21.                         sum1=ip[i];
  22.                         start1=end1=i;
  23.                         if(sum1>;sum)
  24.                         {
  25.                                 sum=sum1;
  26.                                 start=start1;
  27.                                 end=end1;
  28.                         }
  29.                         i++;
  30.                         while((i<size)&&(sum1>;0))
  31.                         {
  32.                                 if(sum1+ip[i]>;0)
  33.                                 {
  34.                                         end1=i;
  35.                                         sum1+=ip[i];
  36.                                         if(sum1>;sum)
  37.                                         {
  38.                                                 sum=sum1;
  39.                                                 start=start1;
  40.                                                 end=end1;
  41.                                         }
  42.                                 }
  43.                                 else
  44.                                 {
  45.                                         sum1=0;
  46.                                 }
  47.                                 i++;
  48.                         }
  49.                 }
  50.                 else
  51.                         i++;
  52.         }

  53.         cout<<"Start: "<<start<<endl
  54.                 <<"End: "<<end<<endl;
  55.         for(i=start;i<=end;i++)
  56.                 cout<<ip[i]<<" ";
  57.         cout<<endl
  58.                 <<"The sum is "<<sum<<endl;
  59. }

  60. int main()
  61. {
  62.         int a[10]={2,-3,4,-3,2,2,-2,1,4,-3};       
  63.         MaxSum(a,10);
  64.         return 0;
  65. }
复制代码

论坛徽章:
0
33 [报告]
发表于 2005-01-08 14:22 |只看该作者

求一个数组中最大的相邻元素之和

呵呵,都是牛人啊,听说这个问题提出来20年后才有人给出算法,我们要求的算法复杂度是O(n)的

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
34 [报告]
发表于 2005-01-08 19:34 |只看该作者

求一个数组中最大的相邻元素之和

yuxh提出的算法不就是O(n)的吗?

论坛徽章:
0
35 [报告]
发表于 2005-01-08 19:49 |只看该作者

求一个数组中最大的相邻元素之和

[quote]原帖由 "whpu000625"]呵呵,都是牛人啊,听说这个问题提出来20年后才有人给出算法[/quote 发表:

呵呵,表示怀疑

论坛徽章:
0
36 [报告]
发表于 2005-01-08 20:02 |只看该作者

求一个数组中最大的相邻元素之和

[quote]原帖由 "whpu000625"]呵呵,都是牛人啊,听说这个问题提出来20年后才有人给出算法,我们要求的算法复杂度是O(n)的[/quote 发表:


真的吗?那我心情好受一些,当时我可是本来想自己做出来,想了一下午还是不对,看了yuxh的算法才算弄懂。
总之打击很大,第二天花100多块钱买了两本算法书...这样说的话我便舒心多了,不过更佩服yuxh了

论坛徽章:
0
37 [报告]
发表于 2005-01-08 20:07 |只看该作者

求一个数组中最大的相邻元素之和

怎么可能啊。骗小孩的,guile也相信?

论坛徽章:
0
38 [报告]
发表于 2005-01-08 20:22 |只看该作者

求一个数组中最大的相邻元素之和

[quote]原帖由 "assiss"]怎么可能啊。骗小孩的,guile也相信?[/quote 发表:


唔,还是等眼见为实。如果whpu000625能给出出处我便信了。

论坛徽章:
0
39 [报告]
发表于 2005-01-09 09:47 |只看该作者

求一个数组中最大的相邻元素之和

阅读了yuxh的算法,改造了一下,使逻辑统一一下:
各位验证一下
  1. #include <stdio.h>;
  2. void MaxSum(int *ary, int n)
  3. {
  4.     int i, start=0, end=0, start1=0, max, sum;

  5.     max=sum=ary[0];
  6.    
  7.     for(i=1; i<n; i++)
  8.    {
  9.         if(ary[i] >; 0 && sum <= 0)
  10.        {
  11.             start1 = i;
  12.         }
  13.                
  14.         sum += ary[i];
  15.                
  16.        if(sum<0)
  17.       {
  18.             start1=i;
  19.       }

  20.         if (sum >; max)
  21.       {
  22.              start = start1;
  23.              end = i;
  24.              max = sum;
  25.        }
  26.         else if(sum < 0)
  27.       {
  28.             sum = 0;
  29.       }
  30.     }
  31.     printf("start %d, end %d, sum %d\n", start, end, max);
  32. }
  33. void main()
  34. {
  35.     int m[10] = {2, 3, -6, 3, 4, 3, -7, 5, 3, -3};

  36.     MaxSum(m, 10);
  37.        
  38.     return;
  39. }
复制代码

论坛徽章:
0
40 [报告]
发表于 2005-01-09 14:17 |只看该作者

求一个数组中最大的相邻元素之和

原帖由 "cattiger" 发表:
  1. if(ary[i] >; 0 && sum <= 0)
  2.        {
  3.             start1 = i;
  4.         }
  5.       
  6.         sum += ary[i];
复制代码

似乎应该为:
  1. if(ary[i] >; 0 && sum <= 0)
  2.        {
  3.             start1 = i;
  4.             sum=0;
  5.         }
  6.       
  7.         sum += ary[i];
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP