免费注册 查看新帖 |

Chinaunix

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

[算法] 迅雷笔试题 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2010-09-15 12:52 |只看该作者
假设序列:
A1 ... Ai
中已找出了最大的连续,现在考虑下一个元素: Ai+1

那么,现在的最大连续序列,要么在A1... Ai中,要么包含 Ai +1 。

初始情况:
若序列中无元素则最长序列和为0

论坛徽章:
0
22 [报告]
发表于 2010-09-15 13:32 |只看该作者
假设序列:
A1 ... Ai
中已找出了最大的连续,现在考虑下一个元素: Ai+1

那么,现在的最大连续序列, ...
lbaby 发表于 2010-09-15 12:52


不一定哦
按你这算法只能找到9

论坛徽章:
0
23 [报告]
发表于 2010-09-15 13:36 |只看该作者
把连续得正数和负数合并
再把负数两边得正数都大于该负数得数合并
最后最大得那个正数得集合就是结果

论坛徽章:
0
24 [报告]
发表于 2010-09-15 13:56 |只看该作者
回复 1# davycu


    感觉俩for循环就行了:(代码没测试,感觉应该可以)
   int max_sum(int *array,int array_len){
      int max_tmp = 0,max = 0;
      int i,j;

      for(i  = 0;i < array_len;i++){
           for(j = i;j < array_len;j++){
                  max_tmp += array[j];
                  if(max_tmp > max)
                     max = max_tmp;
           }
      }
     return max;
   }
刚刚公司搬家换了台机器,没装LINUX,没编译运行,不知道结果。

论坛徽章:
0
25 [报告]
发表于 2010-09-15 14:06 |只看该作者
回复 24# robin254817


    忽略了一点。int max = -2147483648,可能max最后结果为负值。

   int max_sum(int *array,int array_len){
      int max_tmp = 0,max = -2147483648;
      int i,j;

      for(i  = 0;i < array_len;i++){
           for(j = i;j < array_len;j++){
                  max_tmp += array[j];
                  if(max_tmp > max)
                     max = max_tmp;
           }
      }
     return max;
   }

论坛徽章:
0
26 [报告]
发表于 2010-09-15 14:08 |只看该作者
回复 12# churchmice


    如果数组里全部都是负值怎么办?

论坛徽章:
0
27 [报告]
发表于 2010-09-15 14:30 |只看该作者
我也想问下:什么是连续元素

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
28 [报告]
发表于 2010-09-15 17:02 |只看该作者
把连续得正数和负数合并
再把负数两边得正数都大于该负数得数合并
最后最大得那个正数得集合就是结果
a1406 发表于 2010-09-15 13:36


正解,但第二步不能合并了(合并是破坏性的),第二步是用一个Loop遍历

论坛徽章:
0
29 [报告]
发表于 2010-09-15 17:04 |只看该作者
根据 #24 楼提议,俩 for :
  1. #include<stdio.h>
  2. #define N 10
  3. // 只要结果
  4. int a[N];

  5. int max_sum ( int *array, int array_length ) {
  6.     int tags = 0;
  7.     int max, i, j, k, m;
  8.     for (i = 0; i < array_length; i++ ) {
  9.         max = 0;
  10.         for ( j = i; j < array_length; j++ ) {
  11.             max += array[j];
  12.             if ( tags < max || tags == 0 ) {
  13.                 k = i;
  14.                 m = j;
  15.                 tags = max;
  16.             }
  17.         }
  18.     }
  19.     printf ("the max sum is %3d ,from %3d to %3d\n",tags,k+1,m+1 );
  20. }

  21. main () {
  22.     int i;
  23.     int *p;
  24.     for (p = a; p < a+ N; p++ )
  25.         scanf ("%d",p);
  26.     p = a;
  27.     max_sum ( p, N );
  28. }
复制代码
  1. #include<stdio.h>
  2. #define N 10
  3. // 显示每次的结果,再作选择
  4. int a[N];

  5. int max_sum ( int *array, int array_length ) {
  6.     int max ;
  7.     int tags, i, j, k, m;
  8.     for (i = 0; i < array_length; i++ ) {
  9.         max = tags = 0;      
  10.         for ( j = i; j < array_length; j++ ) {
  11.             max += array[j];
  12.             if ( tags < max || tags == 0) {
  13.                 k = i;
  14.                 m = j;
  15.                 tags = max;
  16.             }
  17.         }
  18.         printf ("In %3dth  the max sum is %3d ,from %3d  to %3d\n",i+1,tags,k+1,m+1 );
  19.     }
  20. }

  21. main () {
  22.     int i;
  23.     int *p;
  24.     for (p = a; p < a+ N; p++ )
  25.         scanf ("%d",p);
  26.     p = a;
  27.     max_sum ( p, N );
  28. }
复制代码

论坛徽章:
0
30 [报告]
发表于 2010-09-15 17:11 |只看该作者
正解,但第二步不能合并了(合并是破坏性的),第二步是用一个Loop遍历
folklore 发表于 2010-09-15 17:02


不合并?   30 -20 30   这样得不合并么?   应该要合并了才是最大连续得集合吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP