您的位置:首页 > 其它

数组2--数组首尾相接,求最大子数组

2016-03-26 16:45 323 查看
结对开发我的队友王春帆,学号20132902博客地址 http://www.cnblogs.com/-beauTiFul/

设计思路:
  输入数组 1 -4 -2 7

  a[0]=sz[0];1
  a[1]=max(a[0]+sz[1],sz[1]);-3
  a[2]=max(a[1]+sz[2],sz[2]);-2
  a[3]=max(a[2]+sz[3],sz[3]);7

  max(a[0],a[1]...a
)

  同样要用到数组1的思想,由于可以首尾相连,就转换成分别求{1,-4,-2,7}{-4,-2,7,1}{-2,7,1,-4}{7,1,-4,-2}这几个数组的最大子数组,再求各子数组的和。

#include<iostream>
#include <algorithm>
#include<cstdio>
#include<vector>
using namespace std;

int main()
{
int i,j, szgs,szgs1, maxsum;
int sz[100]  , a[100];//最大数组
cout << "请输入数组元素个数:";
cin >> szgs;
cout << "请输入数组元素:";
for (i = 0; i < szgs; i++)
{
cin >> sz[i];
}
a[0] = maxsum = sz[0];
szgs1 = szgs;
if (szgs>0)
{
for (j = 0; j < szgs; j++)
{
for (i = j + 1; i < szgs1; i++)
{
a[i] = max(a[i - 1] + sz[i], sz[i]);
maxsum = max(maxsum, a[i]);
}
sz[szgs1] = sz[szgs1-szgs];
a[j+1] = sz[szgs1-szgs+1];
szgs1 =szgs1+ 1;
}
}
cout << "最大子数组的和为:" << maxsum << endl;
}




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: