免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
4
戌狗
日期:2013-08-15 18:22:43技术图书徽章
日期:2013-08-21 13:48:45巨蟹座
日期:2013-09-26 17:06:39处女座
日期:2013-12-25 11:26:10
21 [报告]
发表于 2012-03-29 13:58 |只看该作者
enough_zerg 发表于 2012-03-29 13:56
这成纯娱乐帖了,哈哈
恩,好吧,是我没说清楚
话说测试会找茬的,其实我也挺烦这个的


主要是C版没有斗争,太没意思了。

我期盼娱乐贴,吵架贴

论坛徽章:
0
22 [报告]
发表于 2012-03-29 14:05 |只看该作者


  1. int calc (int * a , int n)
  2. {
  3.         int ans = INT32_MIN , tmp = 0 , i ;
  4.         for (i=0; i<n ;++i) {
  5.                 tmp < 0 && (tmp = 0) ;
  6.                 (tmp += a[i]) > ans && (ans = tmp) ;
  7.         }
  8.         return ans ;
  9. }
复制代码
找喷代码

论坛徽章:
0
23 [报告]
发表于 2012-03-29 14:16 |只看该作者
hbmhalley 发表于 2012-03-29 14:05
找喷代码


。。。没这心思
这样玩就是娱乐自己一下

论坛徽章:
0
24 [报告]
发表于 2012-03-29 18:11 |只看该作者
本帖最后由 三月廿七 于 2012-03-29 18:13 编辑

回复 18# enough_zerg

看你的代码我就想笑,你用了2倍的代码,
多出来的那几行代码都是需要时间码的 ,

+整个项目下来,你算算多码了多少代码?

论坛徽章:
0
25 [报告]
发表于 2012-03-30 09:09 |只看该作者
回复 24# 三月廿七
你慢慢去学吧,你需要学的还太多了

   

论坛徽章:
0
26 [报告]
发表于 2012-03-30 09:36 |只看该作者
回复 25# enough_zerg


    我不会中你的诡计的,..

论坛徽章:
0
27 [报告]
发表于 2012-04-08 10:29 |只看该作者
本帖最后由 shimmey 于 2012-04-08 10:30 编辑

周末将楼主的函数稍作修改,可以输出子数组的范围了。
  1. int foo1( int *pData, unsigned int length, int **start, int *len )
  2. {

  3.       int cursum = 0;
  4.       int sum = 0;
  5.       int max = pData[0];
  6.       int i = 0;
  7.       int idx = 0;
  8.       int idx_max = 0;
  9.       
  10.       if( pData == NULL || length == 0 )
  11.            return ERR;

  12.     *start = pData;

  13.       for (; i < length; i++)
  14.       {
  15.           cursum += pData[i];
  16.          
  17.           if (pData[i] > max)
  18.           {
  19.               max = pData[i];
  20.               idx_max = i;
  21.           }
  22.           if (cursum < 0)
  23.           {
  24.               cursum = 0;
  25.               idx = i + 1;
  26.           }
  27.           if (cursum > sum)
  28.           {
  29.               sum = cursum;
  30.               *start = pData + (idx > length ? length : idx);

  31.               *len = pData + i - *start + 1;
  32.           }
  33.       }

  34.       if (sum == 0)
  35.       {
  36.           sum = max;
  37.           *start = pData + idx_max;
  38.           *len = 1;
  39.       }
  40.       return sum;
  41. }

  42. int main(int argc, char *argv[])
  43. {
  44.     int buf1[] = { 2, 3, -6, 3, 4, 3, -2, 5, 2, -3, -4, -2 }; // Sum(3,8)=15

  45.     int *start = NULL;
  46.     int len = 0;
  47.     int sum = 0;
  48.    
  49.     sum = foo1(buf1, sizeof(buf1)/sizeof(buf1[0]), &start, &len);
  50.     printf( "sum=%d, start[%d], length[%d]\n", sum, start-buf1, len );
  51.    
  52.     return 0;
  53. }
复制代码
输出结果为:sum=15, start[3], length[6]

论坛徽章:
0
28 [报告]
发表于 2012-04-08 10:31 |只看该作者
最大子段和,算法设计与分析课必讲经典动态规划题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP