最大子序列和 到底是求什么的和啊?

nickyoo 2009-01-09 01:41:21

//请大家帮我解释一下maxSubSum函数!最好逐步解释。
int maxSubSum( const vector<int> &a)
{
int maxSum = 0;
for(int i=0; i<(int)a.size(); ++i)
{
for(int j=i; j<(int)a.size(); ++j)
{
int thisSum = 0;
for(int k=i; k<=j; ++k)
{
thisSum += a[k];
}
if(thisSum > maxSum)
{
maxSum = thisSum;
}
}
return maxSum;
}
}

int main(int argc, char* argv[])
{
int a[] = { -2, 11, -4, 13, -5, -2};
vector<int> lvec(a, a + sizeof(a)/sizeof(int));
printf("maxSubSum1(lvec)):%d\n", maxSubSum(lvec));

return 0;
}
...全文
262 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
就呆在云上 2009-01-09
  • 打赏
  • 举报
回复
呵呵
3楼动态规划的
O(n)的复杂度
zdeepblue 2009-01-09
  • 打赏
  • 举报
回复
同意3楼的定义
但是1楼的算法,“分治”的效率(O(log(n)))也不是最好的.
其实是有O(n)的算法的。

int maxSum = 0;
int sum = 0;
for (int i = 0 ; i < len ; ++i)
{
sum += a[i];
if (sum < 0)
{
sum = 0;
}
if (sum > maxSum)
{
maxSum = sum;
}
}

yangkunhenry 2009-01-09
  • 打赏
  • 举报
回复
哦,你的代码是错的,这个效率高些。

#include <iostream>
#include <vector>
using namespace std;
int maxSubSum( const vector<int> &a)
{
int maxSum = 0,sum=0;
for(int i=0; i<(int)a.size(); ++i)
{
sum+=a[i];
if(sum>maxSum)
maxSum=sum;
else if(sum<0)
sum=0;
}
return maxSum;
}


int main(int argc, char* argv[])
{
int a[] = { -2, 11, -4, 13, -5, -2};
vector<int> lvec(a, a + sizeof(a)/sizeof(int));
cout<<maxSubSum(lvec);
}
yangkunhenry 2009-01-09
  • 打赏
  • 举报
回复
-2, 11, -4, 13
就是lvec的所有子集中(这些子集所处的位置必须是连续的,所以叫子序列)和最大的
dahua010 2009-01-09
  • 打赏
  • 举报
回复
就是在一个集合里,任意的几个数相加,也可以是某个数本身,找出相加后最大的结果,
xiaoyisnail 2009-01-09
  • 打赏
  • 举报
回复
就是求和最大的子序列啊
先不说你的代码是错的,效率也太低了,有更好的算法,分治

64,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧