昨天碰到的一道笔试题,求代码解
时间:2011-10-14
来源:互联网
给定n个整数的数组a[](有正有负),求其最大连续子段和。例如:{-2,11,-4,13,-5,-2},得到结果为11+(-4)+13=20.复杂度为O(n)才能得满分。
作者: yxh015864 发布时间: 2011-10-14
int maxSum(int a[], int n, int &start, int &len)//start记录开始位置,len记录长度
{
int sum = a[0], temp = a[0];
start = 0, len = 1;
for (int i = 1; i < n; i++)
{
if (temp < 0)
{
temp = a[i];
start = i;
}
else
temp += a[i];
if (temp > sum)
{
sum = temp;
len = i - start + 1;
}
}
return sum;
}
{
int sum = a[0], temp = a[0];
start = 0, len = 1;
for (int i = 1; i < n; i++)
{
if (temp < 0)
{
temp = a[i];
start = i;
}
else
temp += a[i];
if (temp > sum)
{
sum = temp;
len = i - start + 1;
}
}
return sum;
}
作者: pb_myown 发布时间: 2011-10-14
《编程之美》上有这个题
作者: keeya0416 发布时间: 2011-10-14
老题了
C/C++ code
int max_sub1( int a[ ],int size) { int i,j,v,max=a[ 0 ]; for ( i=0;i<size;i++ ) { v=0; for ( j=i;j<size;j++ ) { v += a[ j ]; if ( v>max ) max=v; } } return max; } int max_sub2( int a[ ],int size ) { int i,max=0,sum=0; for ( i=0;i<size;i++ ) { sum += a[ i ]; if ( sum >max ) max=sum; else if ( sum<0 ) sum =0; } return max; } int max_sub3( int a[ ],int size) { int i,max=0,sum=0; for ( i=0;i<size;i++ ) { if ( sum >0 ) sum += a[ i ]; else sum=a[ i ]; if ( sum >max ) max=sum; } return max; }
作者: Esperantor 发布时间: 2011-10-14
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28