免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 4176 | 回复: 27
打印 上一主题 下一主题

帮忙找下更快的方法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-29 11:37 |只看该作者 |倒序浏览
本帖最后由 enough_zerg 于 2012-03-29 13:34 编辑

最近项目收尾,闲来无事,偶尔看到这么一个题目:
输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为最多O(n)。

写了如下代码
不太满意,看下能有更快的方法没

  1. #define ERR    -1
  2.    #define IS_OK  0
  3.    int findmax(int *pData, unsigned int length, int *sum)
  4.   {
  5.        if (pData == NULL || length == 0)
  6.            return ERR;
  7.        int cursum = 0;
  8.       *sum = 0;
  9.       int max = pData[0];
  10.       int i = 0;
  11.       for (; i < length; i++)
  12.       {
  13.          cursum += pData[i];
  14.           if (pData[i] > max)
  15.           {
  16.               max = pData[i];
  17.           }
  18.           if (cursum < 0)
  19.           {
  20.               cursum = 0;
  21.           }
  22.           if (cursum > *sum)
  23.           {
  24.               *sum = cursum;
  25.           }
  26.       }

  27.       if (*sum == 0)
  28.       {
  29.           *sum = max;
  30.       }
  31.       return IS_OK;
  32. 35 }
复制代码

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
2 [报告]
发表于 2012-03-29 11:59 |只看该作者

论坛徽章:
0
3 [报告]
发表于 2012-03-29 12:10 |只看该作者
一样啊

论坛徽章:
0
4 [报告]
发表于 2012-03-29 12:40 |只看该作者
本帖最后由 hbmhalley 于 2012-03-29 12:41 编辑
不懂留个 max 有毛用
..懂了

论坛徽章:
0
5 [报告]
发表于 2012-03-29 13:32 |只看该作者
回复 4# hbmhalley

。。。这个


   

论坛徽章:
0
6 [报告]
发表于 2012-03-29 13:32 |只看该作者
int max_sum(int *vector, int len)
{
    int best = 0, current = 0;
    int i = 0;
    for(i = 0; i < len; ++i)
    {
        current += *(vector + i);
        if(current < 0)
        {
            current = 0;
        }
        best = best > current ? best : current;
    }
    return best;
}

论坛徽章:
0
7 [报告]
发表于 2012-03-29 13:34 |只看该作者
回复 6# 三月廿七
要是输入是空,你返回什么?
全是负数你返回什么?


   

论坛徽章:
0
8 [报告]
发表于 2012-03-29 13:35 |只看该作者
回复 7# enough_zerg


    你想多了,

论坛徽章:
0
9 [报告]
发表于 2012-03-29 13:36 |只看该作者
回复 8# 三月廿七
你想简单了!想不明白自己先检讨下


   

论坛徽章:
0
10 [报告]
发表于 2012-03-29 13:36 |只看该作者
回复 8# 三月廿七

不是说代码短了就是更快的方法。。。,少年!


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP