免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
91 [报告]
发表于 2010-09-26 09:18 |只看该作者
今天刚上论坛就看到楼上的消息了
楼上提的问题,后来我也想到了,我用数组的第一个值来作为max的初值
一生戏 发表于 2010-09-24 20:52



    这个代码没问题了,不过${#array(*)},${#array(@)}这两个有区别没有,如果有那么区别是什么。谢谢{:3_198:}

论坛徽章:
0
92 [报告]
发表于 2010-09-26 23:53 |只看该作者
  1. int max_sum(int *array, int len)
  2. {
  3.         int maxval = maxs(array, len);
  4.         int tmp = 0;
  5.         for(int i = 1;i < len;i++)
  6.         {
  7.                 tmp = maxs(array + i, len - i);
  8.                 if(tmp > maxval) maxval = tmp;
  9.         }

  10.         return maxval;
  11. }

  12. //计算以array开始的i(i=1,2...len)个连续元素的和,然后返回最大值
  13. int maxs(int *array, int len)
  14. {
  15.         int maxval(0),tmp(0);
  16.         for(int i = 0;i < len;i++)
  17.         {
  18.                 tmp        += array[i];
  19.                 if(tmp > maxval) maxval = tmp;
  20.         }

  21.         return maxval;
  22. }
复制代码

论坛徽章:
13
午马
日期:2015-01-19 14:08:552017金鸡报晓
日期:2017-01-10 15:13:29黑曼巴
日期:2016-11-07 11:24:56PHP
日期:2016-10-25 16:06:46黄金圣斗士
日期:2015-11-24 10:43:13IT运维版块每日发帖之星
日期:2015-09-25 06:20:00IT运维版块每日发帖之星
日期:2015-09-14 06:20:002015亚冠之阿尔纳斯尔
日期:2015-07-27 11:17:582015亚冠之广州恒大
日期:2015-07-24 15:04:162015年亚洲杯之乌兹别克斯坦
日期:2015-04-01 13:28:012015年辞旧岁徽章
日期:2015-03-03 16:54:15处女座
日期:2015-01-22 16:09:16
93 [报告]
发表于 2010-09-27 09:26 |只看该作者
昨天去金山笔试 也考这道题了

论坛徽章:
0
94 [报告]
发表于 2010-09-28 10:25 |只看该作者
看了10几页,就a1406和我思路一样的啊。
大家全是直接贴代码?有没有讨论规律的。。。。

全负神马的都小case了。
不知道大家有没有考虑多解的情况?

论坛徽章:
0
95 [报告]
发表于 2010-09-28 11:18 |只看该作者
Absolute Dynamic Programming !!

论坛徽章:
0
96 [报告]
发表于 2010-10-06 15:48 |只看该作者
回复 91# freesoftsomuch


    《编程之美》上有原题

论坛徽章:
0
97 [报告]
发表于 2010-10-09 10:07 |只看该作者
DP,随便写了下,时间复杂度O(n):

int max_sum(int *array, int array_len)
{
    int maxn, f[100];
    maxn = array[0];
    f[0] = array[0];
    for(int i=1; i<array_len; i++)
    {
        f[i] = max(f[i-1]+array[i], array[i]);
        if(maxn < f[i])
            maxn = f[i];
    }
    return maxn;
}

论坛徽章:
0
98 [报告]
发表于 2010-11-13 10:11 |只看该作者

论坛徽章:
0
99 [报告]
发表于 2010-11-13 19:31 |只看该作者
1.先找第一个正整数,如果没找到,说明全是负数。
2.如果找到了,那就一直加,直到遇到一个正整数。
3.如果遇到了,那就看现在的和是否大于零,大于零的话,重复做下去,小于零的话,丢弃掉,
从后面的第一个大于零的书在开始。
4。如果没遇到(到达末尾了),那就从当前序列中剔掉后面的负数。
其他的边界条件你就自己去想吧!

论坛徽章:
0
100 [报告]
发表于 2011-11-17 22:00 |只看该作者
经典问题,最大字段和问题,用动态规划O(n),用分治O(nlogn)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP